{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/think/anaconda3/lib/python3.7/site-packages/numpy/__init__.py:140: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service\n",
      "  from . import _distributor_init\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'1.7.1'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "torch.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import re\n",
    "\n",
    "import cv2\n",
    "import numpy as np\n",
    "# import torch\n",
    "from skimage import io\n",
    "from torch import nn\n",
    "from torchvision import models\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import warnings\n",
    "\n",
    "import mmcv\n",
    "import torch\n",
    "from mmcv import Config, DictAction\n",
    "from mmcv.cnn import fuse_conv_bn\n",
    "from mmcv.parallel import MMDataParallel, MMDistributedDataParallel\n",
    "from mmcv.runner import (get_dist_info, init_dist, load_checkpoint,\n",
    "                         wrap_fp16_model)\n",
    "\n",
    "from mmdet.apis import multi_gpu_test, single_gpu_test\n",
    "from mmdet.datasets import (build_dataloader, build_dataset,\n",
    "                            replace_ImageToTensor)\n",
    "from mmdet.models import build_detector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "cfg = Config.fromfile('work_dirs/cascade_rcnn_r101_fpn_48e_coco_data1000_0228/cascade_rcnn_r101_fpn_48e_coco_data1000_0228.py')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2021-03-23 17:50:34,667 - mmdet - INFO - load model from: torchvision://resnet101\n",
      "2021-03-23 17:50:34,871 - mmdet - WARNING - The model and loaded state dict do not match exactly\n",
      "\n",
      "unexpected key in source state_dict: fc.weight, fc.bias\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "checkpoint = load_checkpoint(model, 'work_dirs/cascade_rcnn_r101_fpn_48e_coco_data1000_0228/epoch_48.pth', map_location='cpu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.CLASSES = checkpoint['meta']['CLASSES']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CascadeRCNN(\n",
       "  (backbone): ResNet(\n",
       "    (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
       "    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
       "    (layer1): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer2): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (3): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer3): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (3): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (4): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (5): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (6): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (7): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (8): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (9): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (10): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (11): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (12): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (13): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (14): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (15): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (16): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (17): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (18): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (19): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (20): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (21): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (22): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer4): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (neck): FPN(\n",
       "    (lateral_convs): ModuleList(\n",
       "      (0): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (1): ConvModule(\n",
       "        (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (2): ConvModule(\n",
       "        (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (3): ConvModule(\n",
       "        (conv): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "    )\n",
       "    (fpn_convs): ModuleList(\n",
       "      (0): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (1): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (2): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (3): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (rpn_head): RPNHead(\n",
       "    (loss_cls): CrossEntropyLoss()\n",
       "    (loss_bbox): SmoothL1Loss()\n",
       "    (rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "    (rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
       "    (rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n",
       "  )\n",
       "  (roi_head): CascadeRoIHead(\n",
       "    (bbox_roi_extractor): ModuleList(\n",
       "      (0): SingleRoIExtractor(\n",
       "        (roi_layers): ModuleList(\n",
       "          (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        )\n",
       "      )\n",
       "      (1): SingleRoIExtractor(\n",
       "        (roi_layers): ModuleList(\n",
       "          (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        )\n",
       "      )\n",
       "      (2): SingleRoIExtractor(\n",
       "        (roi_layers): ModuleList(\n",
       "          (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "          (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "    (bbox_head): ModuleList(\n",
       "      (0): Shared2FCBBoxHead(\n",
       "        (loss_cls): CrossEntropyLoss()\n",
       "        (loss_bbox): SmoothL1Loss()\n",
       "        (fc_cls): Linear(in_features=1024, out_features=11, bias=True)\n",
       "        (fc_reg): Linear(in_features=1024, out_features=4, bias=True)\n",
       "        (shared_convs): ModuleList()\n",
       "        (shared_fcs): ModuleList(\n",
       "          (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
       "          (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "        )\n",
       "        (cls_convs): ModuleList()\n",
       "        (cls_fcs): ModuleList()\n",
       "        (reg_convs): ModuleList()\n",
       "        (reg_fcs): ModuleList()\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (1): Shared2FCBBoxHead(\n",
       "        (loss_cls): CrossEntropyLoss()\n",
       "        (loss_bbox): SmoothL1Loss()\n",
       "        (fc_cls): Linear(in_features=1024, out_features=11, bias=True)\n",
       "        (fc_reg): Linear(in_features=1024, out_features=4, bias=True)\n",
       "        (shared_convs): ModuleList()\n",
       "        (shared_fcs): ModuleList(\n",
       "          (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
       "          (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "        )\n",
       "        (cls_convs): ModuleList()\n",
       "        (cls_fcs): ModuleList()\n",
       "        (reg_convs): ModuleList()\n",
       "        (reg_fcs): ModuleList()\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Shared2FCBBoxHead(\n",
       "        (loss_cls): CrossEntropyLoss()\n",
       "        (loss_bbox): SmoothL1Loss()\n",
       "        (fc_cls): Linear(in_features=1024, out_features=11, bias=True)\n",
       "        (fc_reg): Linear(in_features=1024, out_features=4, bias=True)\n",
       "        (shared_convs): ModuleList()\n",
       "        (shared_fcs): ModuleList(\n",
       "          (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
       "          (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "        )\n",
       "        (cls_convs): ModuleList()\n",
       "        (cls_fcs): ModuleList()\n",
       "        (reg_convs): ModuleList()\n",
       "        (reg_fcs): ModuleList()\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.eval()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading annotations into memory...\n",
      "Done (t=0.00s)\n",
      "creating index...\n",
      "index created!\n"
     ]
    }
   ],
   "source": [
    "dataset = build_dataset(cfg.data.test)\n",
    "data_loader = build_dataloader(\n",
    "    dataset,\n",
    "    samples_per_gpu=1,\n",
    "    workers_per_gpu=cfg.data.workers_per_gpu,\n",
    "    dist=False,\n",
    "    shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = []\n",
    "for i, t in enumerate(data_loader):\n",
    "    tmp = {}\n",
    "    tmp['img'] = t['img']\n",
    "    tmp['img_metas'] = t['img_metas'][0].data[0]\n",
    "    data.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'img': [tensor([[[[ 1.3070,  1.3242,  1.3413,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.3070,  1.3242,  1.3584,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.3242,  1.3413,  1.3584,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.3644, -1.3987, -1.4329,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.3815, -1.3987, -1.4500,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.3815, -1.3987, -1.4500,  ...,  0.0000,  0.0000,  0.0000]],\n",
       "  \n",
       "           [[ 1.4657,  1.4832,  1.5007,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.4657,  1.4832,  1.5182,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.4832,  1.5007,  1.5182,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.1078, -1.1429, -1.1779,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1254, -1.1429, -1.1954,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1254, -1.1429, -1.1954,  ...,  0.0000,  0.0000,  0.0000]],\n",
       "  \n",
       "           [[ 1.6814,  1.6988,  1.7163,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.6814,  1.6988,  1.7337,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.6988,  1.7163,  1.7337,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.1770, -1.2119, -1.2467,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1944, -1.2119, -1.2641,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1944, -1.2119, -1.2641,  ...,  0.0000,  0.0000,  0.0000]]]])],\n",
       " 'img_metas': [{'filename': 'data/coco/data0228_test/山东1494985475245-xiaochicun.jpg',\n",
       "   'ori_filename': '山东1494985475245-xiaochicun.jpg',\n",
       "   'ori_shape': (403, 404, 3),\n",
       "   'img_shape': (800, 802, 3),\n",
       "   'pad_shape': (800, 832, 3),\n",
       "   'scale_factor': array([1.9851485, 1.9851117, 1.9851485, 1.9851117], dtype=float32),\n",
       "   'flip': False,\n",
       "   'flip_direction': None,\n",
       "   'img_norm_cfg': {'mean': array([123.675, 116.28 , 103.53 ], dtype=float32),\n",
       "    'std': array([58.395, 57.12 , 57.375], dtype=float32),\n",
       "    'to_rgb': True}}]}"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "################################################\n",
    "data[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# cfg.nms_pre = 1000\n",
    "# cfg.min_bbox_size = 1\n",
    "# cfg.nms_thr = 10\n",
    "# cfg.nms_post = 1000\n",
    "test_cfg = model.rpn_head.test_cfg\n",
    "\n",
    "# img_metas = data['img_metas']\n",
    "\n",
    "\n",
    "def get_bboxes_tmp(rpn_outs, img_metas, test_cfg):\n",
    "    \n",
    "    with_nms = False\n",
    "    rescale = False\n",
    "    cls_scores = rpn_outs[0]\n",
    "    bbox_preds = rpn_outs[1]\n",
    "\n",
    "    num_levels = len(cls_scores)\n",
    "\n",
    "    device = cls_scores[0].device\n",
    "    featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)]\n",
    "    mlvl_anchors = model.rpn_head.anchor_generator.grid_anchors(\n",
    "        featmap_sizes, device=device)\n",
    "\n",
    "    result_list = []\n",
    "    for img_id in range(len(img_metas)):\n",
    "        cls_score_list = [\n",
    "            cls_scores[i][img_id] for i in range(num_levels)\n",
    "        ]\n",
    "        bbox_pred_list = [\n",
    "            bbox_preds[i][img_id] for i in range(num_levels)\n",
    "        ]\n",
    "        img_shape = img_metas[img_id]['img_shape']\n",
    "        scale_factor = img_metas[img_id]['scale_factor']\n",
    "\n",
    "        if with_nms:\n",
    "            # some heads don't support with_nms argument\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        else:\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        result_list.append(proposals)\n",
    "    \n",
    "    return result_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "backbone.conv1 , Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
      "backbone.layer1.0.conv1 , Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.downsample.0 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv1 , Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.downsample.0 , Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer2.1.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.1.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv1 , Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.downsample.0 , Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer3.1.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.1.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.1.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv1 , Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.downsample.0 , Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer4.1.conv1 , Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.1.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer4.1.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv1 , Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "neck.lateral_convs.0.conv , Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.1.conv , Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.2.conv , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.3.conv , Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.fpn_convs.0.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.1.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.2.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.3.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_cls , Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
      "rpn_head.rpn_reg , Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n"
     ]
    }
   ],
   "source": [
    "###########################################################\n",
    "for name, m in model.named_modules():\n",
    "        if isinstance(m, nn.Conv2d):\n",
    "            print(name,',',m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mmdet.core import bbox2roi\n",
    "\n",
    "class GradCAM(object):\n",
    "    \"\"\"\n",
    "    1: 网络不更新梯度,输入需要梯度更新\n",
    "    2: 使用目标类别的得分做反向传播\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, net, layer_name):\n",
    "        self.net = net\n",
    "        self.layer_name = layer_name\n",
    "        self.feature = None\n",
    "        self.gradient = None\n",
    "        self.net.eval()\n",
    "        self.handlers = []\n",
    "        self._register_hook()\n",
    "\n",
    "    def _get_features_hook(self, module, input, output):\n",
    "        self.feature = output\n",
    "        # print(\"feature shape:{}\".format(output.size()))\n",
    "\n",
    "    def _get_grads_hook(self, module, input_grad, output_grad):\n",
    "        \"\"\"\n",
    "\n",
    "        :param input_grad: tuple, input_grad[0]: None\n",
    "                                   input_grad[1]: weight\n",
    "                                   input_grad[2]: bias\n",
    "        :param output_grad:tuple,长度为1\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.gradient = output_grad[0]\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "    def _register_hook(self):\n",
    "        for (name, module) in self.net.named_modules():\n",
    "            if name == self.layer_name:\n",
    "                self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "                self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "#         module = self.net.rpn.head.bbox_pred\n",
    "#         self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "#         self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "            \n",
    "                # print(self.handlers)\n",
    "\n",
    "    def remove_handlers(self):\n",
    "        for handle in self.handlers:\n",
    "            handle.remove()\n",
    "\n",
    "    def __call__(self, inputs, index=0):\n",
    "        \"\"\"\n",
    "\n",
    "        :param inputs: {\"image\": [C,H,W], \"height\": height, \"width\": width}\n",
    "        :param index: 第几个边框\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.net.zero_grad()\n",
    "        # output = self.net([inputs])\n",
    "        x = self.net.extract_feat(inputs['img'][0])\n",
    "        rpn_outs = self.net.rpn_head(x)\n",
    "        result_list = get_bboxes_tmp(rpn_outs,inputs['img_metas'],self.net.rpn_head.test_cfg)\n",
    "        #res= self.net.roi_head.simple_test_bboxes(\n",
    "        #    x, inputs['img_metas'], result_list, self.net.roi_head.test_cfg, rescale=True)\n",
    "        #############################################################################\n",
    "        # 由於cascade rcnn的roi-head是cascade roi head 因此涉及到stage的問題，需要重寫roi-head.simple_test_bboxes\n",
    "        # 其中stage的編號要對上\n",
    "        ###########################################################################3\n",
    "        rois = bbox2roi(result_list)\n",
    "        bbox_results = self.net.roi_head._bbox_forward(2,x,rois) # stage 2\n",
    "        img_metas = inputs['img_metas']\n",
    "        proposals = result_list\n",
    "        img_shapes = tuple(meta['img_shape'] for meta in img_metas)\n",
    "        scale_factors = tuple(meta['scale_factor'] for meta in img_metas)\n",
    "\n",
    "        # split batch bbox prediction back to each image\n",
    "        cls_score = bbox_results['cls_score']\n",
    "        bbox_pred = bbox_results['bbox_pred']\n",
    "        num_proposals_per_img = tuple(len(p) for p in proposals)\n",
    "        rois = rois.split(num_proposals_per_img, 0)\n",
    "        cls_score = cls_score.split(num_proposals_per_img, 0)\n",
    "\n",
    "        # some detector with_reg is False, bbox_pred will be None\n",
    "        if bbox_pred is not None:\n",
    "            # the bbox prediction of some detectors like SABL is not Tensor\n",
    "            if isinstance(bbox_pred, torch.Tensor):\n",
    "                bbox_pred = bbox_pred.split(num_proposals_per_img, 0)\n",
    "            else:\n",
    "                bbox_pred = self.net.roi_head.bbox_head.bbox_pred_split(\n",
    "                    bbox_pred, num_proposals_per_img)\n",
    "        else:\n",
    "            bbox_pred = (None, ) * len(proposals)\n",
    "\n",
    "        # apply bbox post-processing to each image individually\n",
    "        det_bboxes = []\n",
    "        det_labels = []\n",
    "        for i in range(len(proposals)):\n",
    "            det_bbox, det_label = self.net.roi_head.bbox_head[2].get_bboxes( # stage 2\n",
    "                rois[i],\n",
    "                cls_score[i],\n",
    "                bbox_pred[i],\n",
    "                img_shapes[i],\n",
    "                scale_factors[i],\n",
    "                rescale=True,\n",
    "                cfg=self.net.test_cfg['rcnn'])\n",
    "            det_bboxes.append(det_bbox)\n",
    "            det_labels.append(det_label)\n",
    "            \n",
    "        res = [det_bboxes, det_labels]\n",
    "        ########################################################################################\n",
    "        # print(output)\n",
    "        score = res[0][0][index][4]\n",
    "        # proposal_idx = output[0]['labels'][index]  # box来自第几个proposal\n",
    "        # print(score)\n",
    "        score.backward()\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "        # gradient = self.gradient[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        gradient = self.gradient.cpu().data.numpy().squeeze()\n",
    "        \n",
    "        weight = np.mean(gradient, axis=(1, 2))  # [C]\n",
    "\n",
    "        # feature = self.feature[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        feature = self.feature.cpu().data.numpy().squeeze()\n",
    "\n",
    "        cam = feature * weight[:, np.newaxis, np.newaxis]  # [C,H,W]\n",
    "        # print(cam.shape)\n",
    "        cam = np.sum(cam, axis=0)  # [H,W]\n",
    "        cam = np.maximum(cam, 0)  # ReLU\n",
    "\n",
    "        # 数值归一化\n",
    "        cam -= np.min(cam)\n",
    "        cam /= np.max(cam)\n",
    "        # resize to 224*224\n",
    "        # box = output[0]['instances'].pred_boxes.tensor[index].detach().numpy().astype(np.int32)\n",
    "        box = res[0][0][index][:-1].detach().numpy().astype(np.int32)\n",
    "        x1, y1, x2, y2 = box\n",
    "        \n",
    "        # cam = cv2.resize(cam, (x2 - x1, y2 - y1))\n",
    "        # cam = cv2.resize(cam, (y2 - y1, x2 - x1)).T\n",
    "        # print(cam.shape)\n",
    "\n",
    "        # class_id = output[0]['instances'].pred_classes[index].detach().numpy()\n",
    "        class_id = res[1][0][index].detach().numpy()\n",
    "        plt.imshow(cam)\n",
    "        return cam, box, class_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "grad_cam = GradCAM(model, 'backbone.layer4.2.conv3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mask, box, class_id = grad_cam(data[0],2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "def norm_image(image):\n",
    "    \"\"\"\n",
    "    标准化图像\n",
    "    :param image: [H,W,C]\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    image = image.copy()\n",
    "    image -= np.max(np.min(image), 0)\n",
    "    image /= np.max(image)\n",
    "    image *= 255.\n",
    "    return np.uint8(image)\n",
    "\n",
    "def gen_cam(image, mask):\n",
    "    \"\"\"\n",
    "    生成CAM图\n",
    "    :param image: [H,W,C],原始图像\n",
    "    :param mask: [H,W],范围0~1\n",
    "    :return: tuple(cam,heatmap)\n",
    "    \"\"\"\n",
    "    # mask转为heatmap\n",
    "    heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)\n",
    "    heatmap = np.float32(heatmap) / 255\n",
    "    heatmap = heatmap[..., ::-1]  # gbr to rgb\n",
    "\n",
    "    # 合并heatmap到原始图像\n",
    "    cam = heatmap + np.float32(image)\n",
    "    return norm_image(cam), heatmap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7ff623297c50>"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAD8CAYAAAB3lxGOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9S6ytSZbf9VsrIr69z7k382blo/JR1VVZj652ux+22+1282gJCSEBEuoZwgywLCRPYI5nTM0MISQkDyzwBMQMBpYQQkKMkDwCNbZsurte+bjvvO+z9xcRazFY6/vOrXJmVWN32Sn1DSnznLvPfnw7voj1+P//a4W4O6/Gq/Fq/Nkd+i/7Al6NV+PV+Jc7XhmBV+PV+DM+XhmBV+PV+DM+XhmBV+PV+DM+XhmBV+PV+DM+XhmBV+PV+DM+fiFGQET+bRH5xyLyhyLyt34Rn/FqvBqvxp/OkD9tnYCIFOCfAP8W8BHwD4C/5u7/8E/1g16NV+PV+FMZv4hI4HeAP3T3P3b3FfgfgN//BXzOq/FqvBp/CqP+At7za8CPX/r3R8Bf/eknicjfBP4mgGj9y8vxFoiDg6i89MSf+MFP/0EkfnN+8qdI/A6OEE9yj/9EBHf/iRcIggqo6v6+7o4j+fP6U0U0Pn27KOf67wIq+R4vXbyK/sTztxeJKKoa15SPuTuGoyL79WwR2/ZT5Cc/3POzyesVJD/Gry/ct1f4T/zu7lwHhC9/mevPiedczyUIuk3+/jmyPy++c9yEaXN/3MzZZrOUgki8j5byE/O1XcP++TgigiCY274K3Azz+Nv1pef337+UI6pxiW7bDd/nel8PL9/Sl167fb24ftsfizn2/btt872/0l+67m1B5r1/7bXX0FqwMZhjsK4riHA4HrE5cTfmnIho3ltBVRBRyHlwQDXvA7GW9mvcp1L267l/90f33f0dfmr8IozAn2i4+98B/g7A8cbb/o0/9+9BMVSEIiCLoFVjElVRnDknlIrodQBTVSlA0biRqkoRZejEpmPiiOZNoIArNifi8b61KlUKh6VSVLk4LhwORypQDgvmQp8DdygoN25ccvPiRtx+hzkG7k6plWVZaK3FzRiT0+mEu1NLARWaFBynovQxmdNABa2F0ce+mM6nM0WF2FSx4KcZY1re6Ilqjc+fHTP7ic2qCmNMbE766DEnWkAcrSUWeG5okRLz6s7x4ohqwRyW1tAi1FJxd6bF+5W6cDgccmHHwhu9sywH+ujMMbi6esacHgu5225Q++hcXV1xOr2gj855XVEpHI5HLo8XvPb6LUopzDni3tZybezMqbWxrmfmNGotjDF5fvWCdT2hKtTamHNQdcFsRUQxt3g/L0wbuBmlVmx2xsi1yKSvHXDaYWGOyfl8otVKqQWfE8/3ujpdMeak95UiRtGG2cTM6KtRWgEM1YqZcTxe0JaFUgqXl5e8/tobfPvb3+Z8vuLRvfs8eviYO3fu8Bf+wq8hCs+fPuH+nbusvfPm21/ltTffoh0OvH7zJrUoZkY7HOjDWEenlIIitBKfd+5hUDbDESP2y3/5X/yNH37eXvxFGIGPgV966d9fz8e+cDhCV0FLxdwprdFtpRq4KEynqCClgQs+nVoqpSiKcFgaVZXaGq1WwBkGx2WhLQt1Wai1UIjNJITHvzge431E00pPWlsQYKmN2mJi5zROa2eOztIaOBSNzaQShooJ42owrkZumo5NY4xBKQUzw2wSJlqZozPMwmqbo6XkXDhzDmZ6TBszN8YkXJdRSty2Ukp6cNk3gWp8t+MxFl6phaIVVaHUwjTjyZMnvPbaaxyWBVDMnKLhcdwNn0LdjEVGJKLKtMk0o9UWC+58pmhDKJyuzogIpSxcXFzy7Nnz2BgzNpi5sSwLN27c5PLikqsXz3jKM56/eMHDh5+xLI3D4S4XF5dcXl5QM0rwNNbFJb3wy+vGmT6Y68qz0wsOhwPreka0hv+TmKP1fKIPo5ZCKcrp8RlRoa8dx5hjhqGQbX0IY6zpbCzmlYjKSqksRVkOC8tSaHXhsCzhAEqss4uLS0qttFK4ceP1cDatgCitHbn/8AEP7t3lR9//Iz78zi/zr3zv97h352NePPuMT7//Q2595Su89977vP+Nb4BWtBQuloZmZCaiFFVwo5WGqFBVcROKFlSEaUZRZXo4js+LpbfxizAC/wD4ZRH5FrH5/wPgP/xZLxAVylIRcZZl4dgqRS/QqohCK4XjxQXHtqAIy7Jcv9idGzcuOBwOLMvCXDtjzAjvVTkcDrTWqFowi9Br87qtVmqrVFEMx6czfDJHpxvMteNOeLg5QYXT1RXn83kP8Tav9dMh9XTbPe7I53QzxD02uMF0w8agtQUziyihVMbsCIrZ5HQ6A8QmqXEjtQiH5cDheKCWBXAOhyNtabTacI/v7m5pgJy2NFyMq6srbrz+Gq01ihbMCiKTaY7NyZyTvk7O65njYYmwXhWzASIsbeF0OuNmqBbmPDPnzAhEsLPR+xmVAqVQq3E+d3waL57HvCmGirLUhh2PXD1/waPPPqM25fXXbvHs2We01ri8vKTWipszxtxTN5uZUngYgT46Ksq8esGYnXUdqEAfK6oRTQmRco0xMQvDqlo4n69QVeYccf1Aa5Ubx4uY82Xh4nDgWA9oUQ7tsK+p1lrcD4morbWFqoWiZTfUF5c3KKqc+0SKcPfOPT57+IC7d+/wu//6v8bxcOQHf/xHPHv8mM/u3+XyxiXvf/A13nnvA0ppmbYYYk6pWwIC6nCQEoYB0ExDqgiLKFMdkXRW+B5Rft74UzcC7j5E5D8F/hegAH/X3f+fn/WaGxdHfuc3fp1laVweD1weLnA3xhx069RSqaoc2kKryvTwljYmvQ9KK7hBqxUjUoHaWi6egU3n+RiIdxzovSOq9PU6TzWbmDsjF/SUmGjJHG7OCeL0MejrCoCWEp4zNwDAnIaLYB4TL4kPjDGgCFUrKsKyHHltuQQtHI8Xe+i2tMqcExuxEV88fxHfy4zzeqaPjq2DOWEdxrEabTlw46LBFLpNaosQfl1XtBRqqTx7+jTmzR0356qfOUnPPDnmYfQR83PunE4nnj17mhFERSU2x4vnLwIT0UgDej+zLAulVtbzipmxiNJ9MnHAOBwLDOXqxRWnqxNjTNxnePpp3LxxpFVBVFjHmfPzM+7OQ5E9GtuwEzPb83gw5hiYG+aGECldt5U5OohQi6JFuDxeMMy4uHFJrQ1BUXHeevtWfMdSaK2hRSmt8fqNSxRoohxao9SIAA/tAC6UopEKmUV06o7UQnHFp+EotVVGpnGn85n7Dx7yxz/8Ma+/cYvf/b3f40cf/YCHtz9mffKIcV55++13eO+9D/jq+1/DPPN898S9HNlgLJ+ICcWNSgGLNbobDB80VSCwpev5+vzxC8EE3P3vA3//T/r8VitfffMWIlC1oGJMmyhwURfMnNmdq/6Cq5kLtRvmA/NM7Cy97hi4BnBnCRr5HAhC7+fcoIZhOWcxQWYTw5hFIk+3WDxzOq0WwLlaO8MmB2kMDHGjCLRWqG3BbFI5ZIQReXOtjePhEAtSlVortdQ9klANT60qmMUNt2lcvbii1cqhHXasY3qE4C+urrh68YLz06cbPMrl5QVLO7C0+lLOvqUIQu8jfIgIo09KqQHSWcxfKeENN09pPveIp7aGIDx5siIIy1JhGj4H041+VTCfjDmppTC0cF47E9tTGUWxPhOMM66uzvRxxmwiubnFA/DSQzz3dL5iXvU0no3Re2AvrXDztZuYO8dy3NYcIsqyVFwvqK1wPB4REZblEKCaC60eaaVRRKkSaZgDwyaGgyQOoZWyLPE3LagewOE8nKUVTmOCgg8DCfCtrI6pJx4QEUtrytPHT7j98ae86Cf+8u/+NldXL/jH//Af8ejuj3n88CFff/89jm+/yxtvvcM7777P3DY1MVfioDYwwhC6xTx3jDFWaq2MMcJIuiGS9zU3f1Fh2vzC/fcvDRh8ecw5eP7kM7YvrqoIkSOb2Y6cuhtuYD4RCqOvoM4Ux8dk5GZfR2edg2lG753jcsDNEpydIEoRATOWWhK5d2pr1KJIrYhFLrjlpctx4aZFqHdox8ivfUQ+WBt9dPAA5EA4Hi6prWU+LUF8yDWSHDfMWdeOE9jCnIM5ExX2iCqCOYDz+YyWwtIarUWOP55MbAzcJqerE1fPX1BLZTkcUQlPBIThqTUBrImZxEJxGKNzOCz0bvQ+EgMZjBkp06FWfDhXV2fMjNIqfZzxtcf9SKO1oemWc16XxrBAuXfcQ5S+njmtp9hcczBG/H55eYESXnihUI6Ny5sLqgVXo0nbwjKOFwutFQ6HA71H7l60psEqkIa+lJpALWjRiBb1CAYlAgkcmO6YRyrgTEQKbhN6p9XGMMNnTwCucO6xoXpf05ArBcUkkHkFhkFF6OuZH378MVqU3/zzv8n9u3e5d+c2Dz69w4tnj/jGN36Jw+HA2+++z+u33mSsA15mqJKNEIvoUrdIdRrTk+IwZ3LNYLhHapeILPbFmUCsjz+VXfzPOcYY3L9/j5k5n4+JJxA0fNLHYM6BCyAawI+DzR6vl+twxy02kbfCmBPMedZ7TI4NihZuXl5GDl2U4+HA5Y1LjstCkUJbDrRl4er0gtPpRG2N4/FIKYWLekQcijSkgGEUEWwas0TY1+mBHq+T0W2nx1puwpdDszE6Wlpe2zXCP/oIA5cR3Bwj8tkewJy5UVx47eIGfXbmmPR1ZY4wBvPp4/gch4uLS25e3ggP4TBGYAyRAyuo8ORxUnjpLaYbY0wOpXASgWlMs/D6cyBakLzOaX03GKWUfMwpi+IaYWzdqM5MrcoxgEdEcGlcXBxpywFVKNootUQqJkRaJ3G9cSlOYqixAZdDMDc7YxTGrZS6e8jWKnOEUe99ZWmxsVUCTCOxgFhbgr3EfJpBq2H8xSPy3tIPExCFmXFlLRF9jUCOGe7c/ugT3nn3XQ7Hxj/5gz/g+aPPeHD/Dm+8+Sbf+PBXGX3yxltvcfP1N2NT72nl2B1QyffaaGxEmGOAJyW40bdiGd057rJToC+npZ83vhRGYF0HP/j0AZP4AipwGukhValFGXNQW3DJgdA2SonQ9PXjEdUIlS4vL6mlBO8sRLg9J+t5Zc5OEIVKP50Y62QwOWlHKRxqxQasc4CBWKF4wbuzns+sRJ5pIyhBVRjpDZAI50le1nyl9wAUbRpugexHiF52YzCn5c2OkBwCs7DZ4/HMh4MjJxFtxyNvCPZABWpFgfPpirWfOJ1P9LWztMqDZFIggFY3Q0tEGIGSj0i/NFgMVaX3FRsBZELQgYYFpiDQlgDsisY9WlpjWRqlXCBFQZW2VFQdsaAtzQLR1xr3VEoBiUjlZf1DLRpAmMbyNAG07bjMtHCWNkN/EamfJC4jIBGBbPSoeYA7ZgNtLb+jYDM38f7ZBJWrhYLuTBEZuUEYgOkB4hqOet4bze+Txmsdg9PVFd/4pa/z2b17fPTRD/nk+9+nLYUPv/ddKM6zqyveeuttXn/zbdw3PUhy/xp0p6hCKUwiyigehsaQ1JYIc8T3EUgWKSKyUkrqTeq/WGDwn2VMN55eXYVQwo2LduCiJWDmxsXFAUW4uDyyHI64waEtLK3iNlnqQjs0SmuIswNpQoJ3I/JVnwHo9XXwQhsvrs6sNnj24DFP5CmH1qhLo1ZlqUdqLbxI9FhVcYmc3LVGiD8ny6FFSDkmtcRC3dB0A2xMpk/6aaWUa5pLVYOpSI+8CWUkkerNQJhZotDOXNegBVUYY9B7YBRA5IjrSmuKlgMqxlrgdDqxjsjt++i4wKEuuEARjQ3mwto7KuV6sWdYX1LkoiW8eb1ckCIsRZGi3Lg4xOavwe6olF3sJarUQLICwMMIqU5BtACSuMLcaVQtafhIkQyb/mFm2B4GbHo8Ywt/S+I2KYUKY0OE0LihOMMFmSuHesxnpdbBnKqamxqqKOK6X0dpC8ONKtfCrZevLdgApaqiIrhUQDjeWnh45w6PHz7g9scfcXHrJt/5zrd4/Pgx4zR486tv894HX2MS66bIpu0SRI2qbadlXZVaSlyTauAnrrtQaDeiqetobYnUVBWfjsgXb/UvhRG4vLjgd3/nt7i8uIiNNEYq8wQbnaVG/FdKQetCLS2AQGD2Tp+DMTtznCNF0oGbMy1CQS0F5kRrDfovUfObt25ydTohBuv5zPl85vnpeaDlJlxcHFla8MBjTJywuOf+AvdBUeHqmdKT5rtWmQla4sYUEeZc6WsPhgLFw47z/MVzSklBisPItGWMgZZAd91iM8WCnAkEO33MSI/YwvgQ9LS2pCrO0MW5aIcArVRxOQTKXlqEwqmwO5/PtMMhwkocXBnDOLQDhrPUBuocjo22FJZDoRVFFQ6thLfycIH6UnRTS/7ujtaKjYFYRB82PaISF8xlB9gKeo01JFCaWQStKBMPQFdC2zDmjCjlpxNfkYga5kS1IVr272sMCkrNlE5LelktFBFkOqUIRYRSWobTkSOMEQBrpCW66zZKIRmDhs3J+dlzHj18yJ1PPmLa4Ovf+iXeeecd7n78CaerF9x6/Q0++Pov4aKIxWtVBEyS6QiQr9Wa9yWjHJVdtRnXFHOvJVKDLS1ys6CF3TGdIRb7gvGlMAKHZeHDd99PbjtoOnOnrytDhNN5pajQuwGdVgvTSPovwm3zEeG4O6ABrikcDoHat6bMq6ADx+gxkXPifXB5Y+HG5cJYV56/mFydzzx/fsVnjybH45E5Jzdv3AyUn9jUqko3Yz2fQoGoSV26cXF5wexGwjVoqYz1xFjHhtVkWA/DQrgyh4VeQitrj/x+21zunrTfpFRF84YawtKC2jocK5LKsIlhPsN7LI2iGh4u1ZY2QxRjFpRhvVIwwQlBkJF4ChH+ujmHpaI1hVk16MKqDkUi1ZGIhiA2tkpEPeE8A4RFSy7umUbSsBRqbZLg1YyKIVUwH2xRbCz8FI3BTm2Ky86ogKJSeCm1TgtimEXYriWAZdzoY6W1ik1ANcLqKiCW0VhFNJ6LKC5hwGfA9xn5gGhEga1V+pjcvv0Jj+9/xr3bn/K1b7zP62++wewr9z/6iCcPH/LmV9/ll777zZT/5nfy3KT5/TCQpB4VdvlwkbZNCOabzN2uIwg2gVW8n6oGuJlalc8bXwoj4O6cTqfg2BPE6CPC6vO5c7o6pacJpHTMEWKUDMjMZkpYJd/DKVKYfXCaPYCV1XIthk2d5pkyOOtpzZtROR4PiWhPnj17xuPHD5k4z07PuKghSIpJTq+f4f9cI+WQoqzrKXAAMucefY9qNuNWNHjmU38OgJRCqzUiAIHDRaMdFkQKrdVYh9VppQZY5rbTdaUp224ppXDVQzxjJcVFiSccl4a5MbrjPaIaNzgeDtg0+sZvLwveI3Wq2nAzahFayqyPx8rSFBszwu6ijB6fby4p4plRE0Dky5oKS1EBL7iNROYDlNzkyT4dijN63KdNOjxHyI9LkWvtfAq0NgaiFEU07msoLiVzf0PU9rRLNK49jEOAfN4BKawjwoXj8Yjh2EjMJ6lUVWXMdX+felj29xjDufvpHe7fu8+DBw/58Lvf4a2vvM5nD+7w4slTHj38jA+/9SEffOub0CoQLJckwqCuuHosc400RWTDOTSNQcypikRUJIJ70NnugZNIrvNSNHGqcABfNL4URmCOwaNHj6g1w5fMc0UkdNBJk8w5YoOZ0ZZlF+2EGjCYgs0ilszXpgid8GaWgNjmsVSVdV1TJOOUVlEHWzsN57JVDkWTl39O11Ne30gRjtJqAI+qilalnwen04mlVuYWBVgAlK0aWgs3Li4TEGvc1Eu0xI2uLWiuw+FALTXeM8M8VeVqvaKmt2/tgJiHHItrieyck7rEhipEmOwJXHaf4UXVkRKLI/aUoiPc5+FY6H1y0a6BKkma8rAUaisUjSis1VxkaQ9LGgwbcS/KcsB97JiCSDy/ijCGRgSB7991+54q7AKsOUDF4/XbgkmKTGUjkjcZbcqek/tzlz2tKGGRGdMoBkrIqEcfuWFqYCAauMbpdE4qNtB3JdKeSAfS4Jkz+6AeLpjD+fH3/4jbn3zM5Y0b/MXf/ks8f/aU27c/4dH9u/TzC771ne/ywTc/xGsWM1lw+rWEgMxt4B5zHSlV3tvELkoaHjyA0S3y29KlwMDyXmQ6tJMm++T90+NLYQTMjNPpeerwAzoShD7Gno/1dcVx1lOEzz46o68RWkOKhkJeej53zDysudleL+AE9WKZs4oKo4/IUffnSYZ/Qdsh0KoivoQ4I0NfLdCOodV/7fJm5O0zQJzXbt2MBbq0AKYStV5abCIIzYPK9SaHQLpVgrZr7Rox3/LdWhp9DqoU1vTCVSuwMQzO9KCPNkAvUlmJcDe/nxPXtIXrNee9tCVCzFpyvsnrEsY0pjhVCKOSLIhI5Nq1xvdiCCyHTGMMSdAshsemssAsSlE0BUsFxTW8nLumpDnD3LAKsQHk2qBLCTBwhp2h1khNpHhIi12wGUVSThj/2pZYA+a4lsjh3WAU5gyWoRYQDMZAlPSyEzVjzEkrhelO84ZIw6fyh3/0xzx/9pw/9+d/lcOhcffOXZ4+ecydTz7ivfff5Y1vfMD73/gGKwNxZbOcQmGdRtXCBoBsatNtRFGcZMoU9zqMRkYC7JBMYgfxHhuu5n5tqD9vfCmMQFTOnXbrH5jADOBnU7DNCLfVwtpHRdj2zTxyYIyxhq6gD+Px48cgRE1B6uJrq/R1UErkWDYyflJAhaoFMad7UGYly3zrIaSt2kooA0sJMZAmqJMLfczJ0hruk1pb5J8iL2m4QzQjUjEPBL6lIg8IA5MVkVuZbOTcwhgei6aPqIRzmLYGn14Ft6QBPZgJ3XLEDFc3XYB7KOUiTN4LYiF/ltKYS6P3vuf6YYgntSgMo6rSbSKmwVhMQ8yiSCt1AZZFT8F1b4wBiDq1tCwrZmdySprqbp7pWdnv8fb/MCCJiGe9A1SKCqOv1GNlZkQhuVHcDWPQWmOMSFNKshNjAF5TeLMZUlAThkXaVkyYGS1uhU1xLULThU8+ucOcxm//zl/h8eOHfPLpRzy5/4jbH/+Y9z/4gFtv3OKt9z7gnFJp8UlxQpoukee7bJz+dY3EBv69nAJErP/5mzrYXE9ANVmWklHHzxhfCiMwRufJo4c77TL6mgRP5IyjB987bQZHa2EEbM5E/g3LKMAsPaemTt6ds4fXmUSu6lWghspsudTQZOfEb7nmUmSLuZCyVdEZWqJyTBSOLX5ea9qjqitQ7pJVZwVLLEMwlIaPlEVnCD/62ItRNsprEny8aABpc45dJ+8Ofp47fiAqWAeXidMhgbmeGritV4G7IylK8jl3JgARvAQQhRu9r/RzRF6hsU/DIRE5uSmmgVzLmPhMHj0NmMhm7BKv0fRaTgB3Fu9nc4aMW8KQJtyWVOoMlac7Po0qJYBFi8XNCAM5XVAJZkSLg/VMB+o1or5VXu58vzBcUVe0BJjnCOY9QVdN4x3pg1lct/gAArSu5cBrr9/i+9//ARcXl/zyr3yXf/QH/xezD548fEBtynd+5TtcvHaDt997h9psX79aSrACrlgfSDEKJTa3Kdc9LJymlSKOpvgr1oNgln0CRGDTDmyCM9+iWEnA9GfkAnxJjEDvnR9/8nHw1OkxIoULnbRIDTAtPa/5RBVqEYyJHCIvl9rAJsUrnlLdrZpLtdJeUuvVWnd0Vrblt6PUpDpRMp8OYcg2ArEVbE6Wn6IGIYxQrQ2YLLUgxYjKzxIFJW4hxJESpF8RRlbWlbIp7dhD4O2aRUoAZ4SxshG5ch8zQm4hc+uZniQWckRYZeeUN+RfRHap9car76o0PJujpHe06OVAKvbEgGm70Mcs9RE+Ea07rlNrzL+b70KWLff3jVZ8qTAoHh87S1R2br4GTTtGyryFIBTZAWNSdLWVzkaun94zjWGsr4KyEPL6kn1GApcY3ShVER3JrzuTgRFaBJfQkByPl3z849v88ne+x4sXL/jBH3+fJ08e8ej+A773ve8gahxvXPCVd94EBnMYKLssOyKykCEzJmJhpBzFUw5ctDDtjEhBaGGkSXZcktGZmwo1GaNtLW40FNdr+ovGl8IIODA80V8PQ2DJyUbdvlEOB0wEVVjqgujkeIh8bgI2o8zTzBjTScwJti4/olltxa64imow2cU5mKHbopWoLNuQboBNhF1SjDQRel9T4VVRUdYeQGMRpdVJUefioDhBOT1/cWJmKJ7x3hbHZbHTjMqw1PbbnHuZMVt+F18i8252yjCosy0r3IxFhLDdBkoLpD4lwMAOykWUEZt5Tt/Vg5sBKvu/FRseqH1Kuzdp66aCtBkGzTJqi6ggsIM5N0Q7gC1Hd527mzMyQnK3jAXZtfTTnJJUmbkgbjue40QfhFJSBGVERV/PdK2Gka8SpdYioU+ICvHQUswRIeGcMyIPXqpYlI1avuTi4pL1tPLtb36Lh48+4/79qAc4Xz3lu9/+VjgqMd548zVO/TlFo2gMD+raiBqYoAIL5dBYe+hVXDcq0pHhLK2FolGifkCkMkYAmZ46+wAG50vy4c2B5hrwn91F8EthBESVenmZgMcmkRXqIcoypSg2jWWpaHGKwPHiAmEiOEOgzMIcM3XbArblUmUXlKAaiPO0fROtPSTAa++0UneLClmDQFSnkXyzbqFtkeDfVXfgaxN5ROERHBscdXIsI7rCuCE3Fp6eJuhCP4cXVo2bvgk6tpQgZ2efj61YZauIC49nqHgq7oKvFg9gVDJEx6EFMR+eNBHmkNPGT3NnjqwhyGoUJYCqKL7KKMEFMbInQrATpVTchWkj9QEppDHJ9DUoMJHCup6jLHc4iGLW852jDZmI0HcengSGI3oK1WLMUdXNkKa196A33ZSeOMoYWaglwmEmDmDJHUmjlsJEMQ1gWb2iVoAJPihZDUiCzqILb775LlUO3Lz1Gvdv3+bjTz/mk49+zNe+9h7vf+cbnF485zSveP+bH/C0nzKFNBaIyCKNfUSWxmQwfSDuVClY972LUVHFRxjDImWP6MRb1JZ4SQPwk35etMDIQiQPfOVfeDBudt8AACAASURBVCnx/+8hgrZjWEYBJPK1CBeTny2K6EQ122CRck0Fm4HwS9H0RB7FHRLqsyXR+djLsWnc0vuLsXYQreGVMp+WLZ+VkACLb6E2e4rVlgXR0BpoqWksonoRnagY6hOd8XdYo1KultgDIqjH9xAiZNbNgqe2H8hSY0UiKQyjkOH1oS2YjVC41YaIU1KGGjX72X1oSy02YyRKSPwjnK+HA2eiPVit8Rnndd0Nkm/afJfk+gVXcFOGeYh/jAALJTonBfgYG3tmIw+8hJGRSKdcY4GOPhNPEFSWBAvjdTXLfTW7IEWUcU2dxTxFhNB7x0soHlWjDN0YFI8cJuowCrH0C14NT82H+QamhkwbiNRHYA64PL7B66+/zdOHD/ns3j0+/uH3QeC3fusvsl694MXzZzx/8ZQPvvk+j54/jRSvLmC+R2hzDKoWxtrRCqZl10p49s6AaGAz5ow0LMHk6G9UqMwAgbPFXIzrSIwtfdmqETNS+6Lx5TACZAOPayYp8jzf2m4lLaJCbQEabaH6GB6AkQpjPQFRJy8e1YbDNs8X3gLYAUAAzFlKC302Tqj8CsqMfgJ75V8ANtcXCcM6x9Z2SW91x3XiM4CroTBrjYXsMImbcXDH+2Qw0ouuQMkQOReFRTssMgXa8nKVWO6lhnTXNaKAyOETYc+VMfP3kg0qXbYGKpZa9/R6OQ4FujfGecBSkKr4yBCdxCFswHLICKkwbCAm4IWoQZjIIgF4zdDbB9sRdQzREi3bmSVY6O4wifLjc4CbJQ1IK+G9N+xBRDOHz96LI9KqYUFHhi5jMAyw0EUc5YBXcA2Mxw2KWHjmBbQRvSgRGA2moVRUAmh2E2o98s5X3uTpnbs8fHCfB/fvMrXxq7/yXR4/uMfjR/c49zPvvPcWL3rn1AeS5dR4GORNvm6ulCIpE88GNYn9rGaUAp46iLM5S4mIZLpm3woHCtYNMnKdtoIrZUsrRcKR1Ein5xe3E/hyGIFNfeU2N0Qsw1/2HCdQ3Wst/eYJ3COXc7dciJqVg6kEE7BrnHj3bJr5uJYS1YWqiBhFCkq+1jcBSoTNO4nmUKVEwcc0WgvVFz5wJiaGTbjqBiUYArXKxFit4yN436qCDQGteyg8fKC1ZG+BuRf0QDT/nOlZAx+QKL7RDNslsYzsbmNb1GLG0hqGU9PzKpa9FXPONeZVFKxYzIkIq/XgxAus1jkelghxhejnJ5EinHs0Y51u2FXQlgzbJctChuYWDMLo0b9hZkenaBJq1149oG+2sCvmIiICT2xGFGafWbAUEeDwZFAssQwp9G7ZGKZiWihUxozaBtQiYqoCFURSWdphK7pp7cB7777Ho/sPuPfpbe7fu8Mv/8p3OV7c4P6dO/TTM07rFd/89odYhSdXz1nNwCelSlZ5FhbaBh3H9WZXqo3nt2nRCUmDsXKbYMZ5DBYtGMI4TYouiFawiBoikgwRm0Xjivj3EHywO9AvGl8KI+Ab8p686DWlEfTO1i1YI4ElmuM6nmWl0zdV5ya8SaPiQS1Nm+EFotlKhPjuGWlkyEQUkLCFbSKZDsh1t2IJqa8qex+BsBMh4vAiWZgT/RBO5jCE/nxy6MFCtLrQp0UBzQwD6DM0EZZpyF7rD5kblszV5+5Ju4VnEQ8aq6Yizz2CQSnRoxDftDZOFaMQnZL6eQ0jpM7okTbMsYZgZk6GO8MSdBNlMDkeD9nAMkpma4kU6ryuqMsu1TUPmlAJ4G0Sve80rU0pNXUe2ZvBx95AZStpHqNTynXHnFICvFTVHaBNyxUbKA3G6J3pRi3RkASLVmizK2JBMU5R2iKc0wtHqB7lu5IALFZwU1q74Ctv3OLjH3zM3Tu3ee3GDf7V3/s9Ht6/y6O7t3n6+CF9nPjwe9/mapw59cHJQ1RUPDx2SBIi7ZBkLSRZCzfb6WXVaFRTPARgSoCcY1Mo4juGMm3QvGZaliXMzq4HGX0g2TDHbIB9cTrws2FDQET+rojcFZE/eOmxN0XkfxWR/zd/fiUfFxH5rySOH/u/ReS3ft77b2Oz7teA2OaBZf89Go2w/+wj24wN38GtHRv3EZJYHxQJK/FyD/+NO8/rJjjhzM0kkGvVKMrZOgpH84yw3hsSCyEkiVw2QJjjErm5i3DqxqnD+SyMqaxT6WvkmHProLtRgH7d134vDUX2iCAioE0xlgbPo8DE92bEts9nSexAEYqH4WqqqE2qCNaj+ck64LRazKfBMMsCrcQCJCrqwGltk3YH7z1GgKE9NRozm1nYDCYAUjDp1yDeFs1E9HRdY7ApBG0mLjABL9gU5vC9LmSjLSErSzU2g0hBpVLLIYys6w4EuhWmCesAitIRVne6g1WNlnQahU2aUVErF7z91ns8+ewp9+7e5+LyBh9++9s8uH+fx48f8ejhfcB5572v0n1yta6c12hlPi3KnW1YNsWJfogj78/VixMjvfzwqCv1TcQk2QmJLbsPCnmdHZPopGVurDaCNfCJ+MBnx20yxxoFdWNl9BOOMb1/4d77k0QC/y3wXwN/76XH/hbwv7n735Y4a/BvAf8Z8O8Av5z//VXgv+FzDh756SEZmm/h/zXNRdJJtnPRtUi0iE4lnhOa621TBHgmlJTgeobJ8bvu7Zh5matObtYEOhJAl0i+V6C6pRYOLWrmRYVhMwC+OblYFmxYgHMW0YvaZJgE0mtKN8emYOvckfs5Y6OmRC0bZES5sIhm++yoLOwpmNo4dd2UdJ6HppSC5CYJf3vN+UsCd1Wy1ACYJkwKV2uP6kxtPHtxQmt4V3PNKrWKzzNLqzSV1E9V+lzDc6Xkt+yy5PT3TuAWNX6v2eZr0wJEp7AZ319LhN8IKnWndyP33SKDsWs+NpTczdM7Rmm1irP2KBmXGd9DUWwqUwruJcrO9cxkMupERTnURgXqUtAZ0Z6Myq3LN7l/5wF3bt/m13/zLzDGyv1793l47xOunj3m5q0bvP7W69CUZ+czV2Nm9OQYM+TMpdCQ2OhjUJswJaLHsfY9IjULWru0ElFRqXiL9vqjzxCfIXRzusV5DSoCo++pDxkt7ZkUmwZj/vOxA+7+f4jIhz/18O8D/0b+/t8B/zthBH4f+HseO+v/FJE3ROR9d//053xGgj3bxdteIYVtJ89EKD9mdEyRNBZFwLMZxnzZi2YPqnas6a0ih7bp1CUe2xZk8MzswJ8D4pbdWzw63biBG22pqWgDJzbyVV+5aA3zqHeoJQ4zaShzABbtuuYolCqYB+DmCFKzAk6UPnsAYNPo5xWtJRFxdq1AEb2mjHKxqSgRQMZ/hcj1RXI3EZ5lU+JNB5ca1YRSGB5NP6RWrvopADaNugKX4LxD/JN6BI3212MMlmQXqIJPgiaslbHGBlc0mBjIvD+EXkoAlkWCLVGCGuzJd4OmZ48mKyagNpkjOg/FdSjzfA5dpCvnbqzDWDwOe5kTMKfWGq9bCq7OeQYG4FpZ58TPnZvHJcRfUlnKwvErX+HeJ49YT2d+/Td/g4f3PuL5k0c8vH0Hkclb777Dxa0LOoN1HawGnZC5iyt9BlYztuapNSssZUT9CeQBJgGcVlHUojVbtI2HTQkoMgOc1dBoqAhzXWkYq8PFcow56h1LZ1hKZfY1a1XY5+zzxj8rJvDuSxv7NvBu/v55R5B9DfiZRuDzxg6ICbtIZrNmfSSVktRK0CnXpZ67Xn6XUoZnnA61aYotAmgcw3aPH8YzustA5EpbchJtt5OCtMQVsixZstEjkk0osiGm5OaOcvXwz31ky6iMBqLVVejYIzLJhht5M8cYSOIAQqjKJBujSiSBYDPzcNlTgJ3JFBJQCwTdicKZ4Z5dZzIFSqBqa30WuvMAlJZ6iCKqtMSj92uqDtIwJalTlGlQWqXVhorTloVgeJy21L2TdKkbSh+GMziWQiVA3ukePQ1FqKXh3il5D7YUKs4MyPblGELhPEKXcFgOuIGfozJx9BN6KIweTWGnC+UQWpK1Bw18XI60i0sef/aU1hpf/+C73LvzAx49uM/TR58h7rz/9ffRVrh565K7Dx7QxwoSfS9HAqTutvdtCHwh0rjZDc+DYMiNHgZr0moDz0aws0QZtEU/ps1ZmYdDMDMGnUJhrFeIlHQmCT2OHtAGkTr8U01XXhr/3MCgu7uI+M9/5k8Oeekswna4sT0I6X3xLVf/yddZAjdxuMeGIwh7tRSJRCc4aB5VcKXUQP1tsizyUlQR6cYmzgiqTSKsVZIS9F1gE/notSZfSnSZPfVBGQmWZVhsshVyhPe3adGlOGseRIIl2GXIKSMLgiSLyj2YDy0RFWzhkllUChYJYYxowbPxKnWJcDorFeOaJ9MrUgI0cpVYXFMCObfwvkboI3RjNTRUlVtNgM2o1Yc8rSdvfeFarccwFKVbj9OkfFLVMZmRuqlSCrQmMCdSI+/v5tQs5DJzfGQnaSbTAlwsZTu3kb1AxrKOwKYwUUbqPXyVaMFFfpZG/0grZGFRgp/TKbZEunVxg1OHm7e+wnJDeXj7Lg8+vc2dux/z1be+wuvv3KAdFt794Kv8+PaPs2Kzch6TsZ5xnD6c7dCTaTGfZWzpLiF6m/E4CrYK7VCu29tLGJExfdeKpAXe6V+phdU8laAVLAzzotcFxiKGZF3NTwuKXh7/rEbgzhbmi8j7wN18/E98BJm/dBbhxc23nax7i6GksJd9WyeVIskgbB4+3ys8nG2FLFvDifCH5jA8ykI3YyEqqGvchJkdb2TbYpJno77UGXgmqLX2vSJOA5amVg1hjHjSZ8oIjinUdhJGR2vUtwcjkQAmpGdPMYzbXlTkOxBmvHz4p0P2krfM/T1P4YnrPq2nrfsa0mLljQliE0YekAIpK7WUAJPltcqcwawclvTvmpWNCFlNE5HNJtnPG1M1Uilq8PettZhDLZjOiDTKdiZizG8pEqc+CWgTfMQ8a5FoCno6A4VWG4XN6Kc2YMZ5jpYB0fRonSYzREljVkSgFEc1azY8yr1FBaegJogpZzPeuPEGN268wUU58uT+Ez760afc+eHHLDL5zV//Dc7rc6QYt95+g9v37nFOnKZPo/cZR67169oMyJQlmGJqC0fgfeDrOUJ0hdYaW/MPtxmUsc8d05KNTtwWvKSi1gNHkI0Cz4hYS4CzoRQkFJg/Qyfwc9mBLxj/M/DX8/e/DvxPLz3+HyVL8LvA45+HB2xjQ7p3S+dEyMz1xt88wBYNGMmNp1UPBvFaHzDN8kQgdusK1zSk5mLWEhusSEiBi4R3VC2ZWiSP4JKFMNuJRPvF4xatyrb+iLUsbEdfwcbpb9e5hf4p7dUUImlq6RNU46XvbXPuN1U1CCQhUo3uEWlMlPMQ0CU2g4SAJw5VjZbo2xRvNQlanKLGoSmtCUtVlkW4uKi0VjkclujxKEHJalWkRBS19STcTrkJMFay514AUn0O+oaKS5zYs4l+tNaQ7QpMMaZMKE4UDAotu0lv6WwwJLLrtQTo2cMhshvNDslQtAadWoTB4DTPDAZTDApMid4GhJKffu689dW3uTgeePrkEffv3eYHP/xjDhcHvv7ND3n+4hnr7FzcusnDp485W1S6TldGMipjhBOY2VDVKSBBo/YxOV11xozzGkKxWXbco5aaLEawHCEUTOEPaW9z7Vz3n4jekbrdBTHQEcwUUVPTJ8wpjA08/JzxcyMBEfnvCRDwbRH5CPjPgb8N/I8i8h8DPwT+/Xz63wf+XeAPgRfA3/h5778NZ1PEaW788Eab1hrYa663RH0/2EKuVYQ7CpoKPyUQ1qmkXNiz3VVQgnhYUNlBmJQMb3oBjxzON6+7eXUNlqJUTToqymHaIfL21SOtCNS6RjmxhwErEo0/tJQMY2eAV2Z7k5HZ1y07SqIfzAbRijq+GZ6bCkCzV3+VnXMPIVWCpdm7bmwiKvc0gvvsI5qVgx5gVXTwjZOBSh4EKxqFVWOOPFBFs5Fo1MQ3bZyzpdtMo2OZnvVUAJpNtiYfLso6J5bGIDbmdfp18MbMk5ID5Y6bvzeBUWWeto2XYGAmhL07lC293Axw0oaSEt4lStHf/OpbHNqR+5/c5tn9x/zoBz/gV3/91zh65f6djymckSP0eWYd552ZGjO0KoG5sNPUc0bxlKZCs9YAm7dCK81jzDaswM2ZTKoW+jqSQYpI1hMsB0Gqwgx1KKp56O11lBAHy6auYMT9GRZVq180/iTswF/7gj/9m5/zXAf+k5/3nj/n87I9NUiRyBFzAmKxy3YQTaDmWZKJVoaDdedQ06Jq9obHo5hFJLxZ9huQ2FuxGC0YCc1CDWfLpwHzzNczzMoqNSkwTmuAUK1xcWzRu5DAF2xu3otAdbnGIhzfG6TEZg30dztck00g5B4hqygmhW4JWG5n+aWGwT3qJTIOZHi8X9HozKxwDaCFECJSKnVCzZJqyVJQiwNM4/klnuPBkDiCiFGPjdNpDYC1KsakaA1Pi8VG8zyqrSyZusV1tGVJsxNqPVflap00DQajStv7EHQi3L/eOASlRhw6a33S/ToylFoY3Zkj2tKpV1xKgMgWWNImD6s1GJY33nyN73zrmzz88ad89Ec/RIbwl/7yX+H5/Ufcf/gQ7yfqTefWm7d4tj7by5tlUeZwzuuaXZUjRfQ1OlF3F2yslFqZxNH06gWZEj0ylwBSkaAEkThubyi4KuN8XUi1OOHSloLU0AaoO6UJRVt0fprGwKnEKcguFqdAyUuVsJ8zvhSKQdizgNgcIuExPTyxbPlohm5KoOt7m6uXjJyW8Myqtnsuc08vV1APGadPT5ntVmlGdB9+SaQD16Kgl2u29zA+rjZQXfEoRS3OVrwnEk0j1dm730qGzFsJ7pamyF4lplmKe91mPV+4X9vkJfRENIPP6zF90zlch4CxoTd2w/K7hActgEilZEszzePL4uiuOMZqkxQH6RfXcrE0Rn5WMAMvqR0T3HVXnPkS3ZXVj4ktRL8ev26nlk0/RKMwCZWkCaMnQ6ReUcp8nqEEFQkWYWYjkTE8DInnqVVbRaUTOJBZKByvVt5+/x0+/OaHPLz3kLu37/DmO+/wtffe58nHD3h6/wHnZ885XsKNr7zBs9OzTEcinUkkiaUVZMI64myErkIATIXMdeLw0FazUUwUulaESh67ngVUVxJt6cWAYTRCv/K8CAVH+6BonHHIS23KSh6YMjKtjUYw2YlrWB4O+/njS2IEXi6dhY7vHXtQT4B+O9QjUQEPwYvD9SYl8u6Xs5+iEaJVtnPbZwhCclFvenW3aKu1rusuUBKJk3f3/u1soV2LykIjD/aMTbH6oIrSSh6+KVsnnmvKUzMCkXBvmErw6ma7Gk8SOHSb++Ei22jLwug9SoZ3jCBC7I0G2gxH1PGDtBJ9E5ygKCVya/cUtFRwmSymUbeQWoJNMm3TAg/xSKmkFLDsLJQU3trjLAfXgngU4HQzqoKFMCHbqGWKkOmKFMXHOZgZCRB3iiBZaTc9ajqiCtijJbhH2bG2gow4lcgxZu9IOUT9faYKRmARMi/2Dkd0p1bl4uImv/or3+PBZw/4+PaP+LXv/SrjxeCjH/2Qfu85pydPufnaJW997Ss8fHaf2ixOqZorbVEO68SXwoqAC8tcmCOOhZtMFjI6E+GCLDSrUewmTRlSkOxXWDSZmX5G1x5RbimcDS5qRdwZ4hylIGKsM1SfKlEKLSlpL3mOpQgcSgsB3AT9GRVEXwoj4AkCuhCVT2TwL56HMnjWr9tOkiFC023R5KGL2R8ed4YpYMwuqHoYTQu6kKLZQCPDyBlcvb3k7QP4SzBrpK4969w3Tb4kuBeeNdKFUO1p0owRKUSjSKXbeEn3ngDlBuMbUX3IdbHHT6u8AuzM+oGszw8eeO50pft24IaybIiaWEQoLrTsoLP2NVMcZdP5DZsssgGSW+1Czr3P7BIUnhuJ8w2iAGtQW0siwYFQvUVfxZz4LWLLnnfuG9vgHNpFnlDsqLbkwWe29pphEKwHaOt5lJoHa7EcK1NCgHRcClUr53UwRrStGx6ht1GRGdco5iyXC7/xa7/GRz/6EVfn5/zV3/ltHn/6kAef3ubFZ884P33GV9/9Kjdev8mnD26jhyhGMo+DVKZP9FhpTfA6YBHQI/pUGS9gMjgkfDWLAyu3zs4bZ+WowqEVWs3qzCyAmuLoiNLj5wUeHCZdhd4no0Y352UIrR3Rg7BIlK1HyZvjMsMJtUqRwlDjvMYpUnXvk/FPjy+FEYDIT9kAOA0ZqpAbozgyJ8jWzSbCYctuROFprhenWwbqW+FRKcmTR7lp344KS6HRJsyJYGQ7j0BzI2SHH9uKeTKcdqLYIxuCBHAnKRoy5oyORdGoNMqIPWmel4/6mnhU/blnr74sfiKuZWsnBsF21OxqVLT8RHHRyz3mPKnQiSP20uaV2JI9hSSqYeBqLRhGFckWYAbi2MjUSII+HGMGPaqyYySj2/UBIHnVmoa8bHX9eUaEEtx+KDHDiEaQN2lamMxkYkJUs68Li5Zf0eZtRhgukseSOYel0Up0Y25SsBsXXJ3OPL/qFHOGg26214VWGt/65jd59NlD3I1f//U/z2cP7vL4/gMe3b2Hv1j56lff5+LyNT65ewerjqYseaktxFsMFhMupTDFGOfB7FCurlif3GO5WnlvNm50Y6qjOrl1ntxYJ8KgY1SynBpi7QMmkQaPWnl8iPSheOX5sdK+/i5WG6fLypPXGudlQZlMJOjnoix14eJwoJbC89MKEl2U+/olP3wEF3xGuK576BwYABoVYl5a8v1buB/MgVpQSdG5NvLFlVBpFYem4HMEam5ZrJLqK3KzkzkuHmfWlaKsOoNXz2dsirwo+U2P4Lp375lZCWdT6D3SQddom8aIyrCqQm3b8V8BgFI1W30FilsEmNdRQt3k0ALNK94to6RJy9r5sHzXkcO0iRNtygqSDVk1IiLJyrSRLEFV1lRgWiiFon7AY+Nv9QCeCzZhdcCpEmBWHBa7pDjG8Jk05AhUWqNAPptgJLXZLSTUukVfglAxn4zucUy6e6Qn+C4dxsGKxhxo9CAo/H/Uvcuvbdl13vcb87H2Puee+6xb71tVZJEmi0+LkuLYkdMJ3DCQRnppJYD/gDQCpJe/IK0A7qQRIK0kQNxI0kojcIQAthMlTixZtiRKJEUWi3Wr7vt9ztl7rTnnSOMba59bTFGSI8G42QRRt26dx36sNeYY3/geMKVEpWFjxlJlWzKWOuf7QenOzvfk7qRxxEff/IjtptBG4t1bb3Pv9uc83z3i7s9+zruvv8vmxobrJ2/zs88+5+n5KZe2XT4Ru4Vr+w1XdjNbBvWT+1x5/JxLZwuXX+wPFuqJxD455wlaMXKT/dzjI+POpURiy5EXWhQ9W1muxCbKO1OHK6cz1Z1kM68/6Vy6/0Qr6DaoZFpKnG0qDy5teH5UuPL1Dzi/fEI6OeJxVqEtdcMyGiM5v+rxahQBA7m+ZKlDCWpsoOnrzL+uiWrKoTrzdTYAuKBGxiz8EnlWAJ0Fl72LiDR8XJwQgKi4uhxzkAuMUHL5OHxgK214RfrX1ZrGvywwZkheLMhYUVdL78wRYbaONB5rypTDa99dHgWRv9iCZuxDXIScM5YvwMX11a+v1d0P5J3eFfNVwwmI6LIOvIuk92L1augxkrW5STjkgMdziju7s7IslZ2YRo7INRWGFX1fu6hVlZHj89R608mTjFh7c2oVhba1xmh+WNeqSxgHObEWceqWVuCnZoGpNSe2ORNKJLzDiRU65yrgezEZ33nzJsdTok6Jo5Mj7vz8J5yfPuXx/JT3v/4Vtr2SuvH8yWdMt3/BR7uFt05PeefpPabWONqfc4mk/VsuvKiDdrzl5++9waMEz25e5+68cDZ3dpZouVIj8fosOWPSBqZaotTgCsT6trvTkJ7Cls7JDHkZBx3hEYOjDNfM2H96j9fGzMmpc+XRc954fk65+/s0P2djG7xU7pZC/fAWt+sxD68e/8rb79UoAgT6/Es3ri7q9cY+/BVAmFOmA5FnBQbXrx9RCJo7ZWhzuqmFPhRD3sc4dBxrQKiUaTKtNE8HS/NVXrxafzmutVuWcCkFrXa0FgVIs7q5AK5UEvPo5FJobYUBxhe2BLpvTc5SLwWSvMx+zLHK00L9Yq03PDQKXUq1VEVdVsiKs4RTUilir6mgjpAbc7AzI0RTsTY5ePi5r3LmKDz+kvVZGIL6EP6sBeEgDY0B3QfenJTrAaQbDkToy6EwGPRF2IwZJPLhfUmta007BBDuznfUaaJWqRhL2YiHURI1Vea5cXQ8se8zx0cyFVlaY2Bcv36Vy8dXaWPPkz/9Bbcff8aLfsp3vvNNNo+dqy/OOXn2jO0ffMJbD8641GZKO2fkPb3CvW3h8Ye3eH5UufvmMUwVz4klJ3ovPGmNZ+d75t7Zu/CRpRhPXezC6toupKJEKIKLsY6ItQfhrcCz4fTkeCm4VyryIdjkxPTNS9zuzmzOtg+uni+8sXfe3zXu/+zn3Dg/5+3TPelf/Jibw9gn47/4FffeK1IE1NqRtN5oyI5Lnn0y+sDUAuboSFUgLOhzQ5jAwX7ZcGu45VgqaoUzIknYU6yvepxVptNFvgDBA0CtqGHULPBJirSLNVvJFll5rkiuJJ/BFhLhZCvd1uXnF+u1viL+AXzq53lYgmuk4VADLERGATYmeeWNsOUm9uZ9NPCIFpeXNr5uQxIy05i/GKhiQVZKFic9wR3wdBDugFaYCljJAv5WjoEDVrQtWDkKTd+nTIAmwDMZy7yn5Brv38tdWDqsr1YTUfSJHVaaZWPs2yKS0RA1mHhfck5yY7LMyNDzurFZ5PZcKnNVZ3nj3Xe48e5r3P/kHqdPHvD49s9579qGb731Ljd+7ydMf/wpr50aaTGe98rdoyP+8PIl7ty4wf7qRD8uzFvDSmbyRK9h8VZg04297+nJYEqk1pjSwL2RhpG9l8HAdQAAIABJREFUUE0+kdl08m9toloRHhCfZXbxHrqjAmEFG4PaGi1ldt3pSalFaXQWMs9S4cHxxO3LhT882XD5+x9w1Z3jF+fkFzvGn/6Y1x6/gNMvv/tejSJgRi5q/zrhPxcod84ldsTBmDJRQxNJwRWDg7UyX9iN++GE17xvwYYb2HCdjQ6wkm3SFwHClHW62Sp7LQdTTFxrQh9OtkE2p6bECHzAs5hgm3xxmmlXFvr2ILowCFmthDElaMYdP7D6gAsPAVkEoQom/kTCWBbpIkbcuFqJx/uVtBZMOVNTxLANO6gtjZVdaKHj7wddhrTuhJDK5WlXiv7OU7D2pJFYOzSL/7XlwtXYV7pyFjlouAdTUfPvmijIxUcn6nFKyvqzTPPOyDXAVnULLYROHRmc7uZB3VSK6b0oJUtIROL6W+/wxrU3Of34p2x++DMuf/qQv10Gb3y853r6hOdb43Y94mcfXObp8Qm/KImHY2EUxycnp8ZRLaSmju4sO9Z3DE/UkTmzzNIUllPQ55CpsVY1PItVmU3muMkSk4W4yIqukVgZOwkpj1QMm8MZ+QB4L8uZRtQ6CRuZO2mT6Rl2Z6fgG54y2I8F3xbKt7+DzQ1+8b9+6e33ahSBWDtFJMbhby8METgg3yMCIVq03StT6ECkibZbnYHFzh3I+i22Sm5i6li9CgfjQGSR/ViLdaUKyOreKiS3MOikksg1sIBSop0W3pBSOsiLS62MeYb4Hlo5RHQVt+hQCh4ptTU5w4M0kjJKvwlab7YA6QKxH0tcQGgr4QNbAh/J4qavvfvSLizTj6uSiDMdRqQRDUguNZ+oANoG5FwR9u/4aGAZ92jdkjqFFJ9RCtC0BuGoLQIuUxKFGruQTCtUA41Na4KuEYBtjCXRDWw2G2zsGL1gBY1dKdEZYuCVwjz2MDrLmDjJhVPr5MU42hzx4c03aL+4w9u//zPe+PFtLg0gbXl8tOH3ThJ3P7zO8sG7PHx+zrwY+z5TXanRZZupPsipM1UjTSm2PRNuukkFZg0V2DKBLViMNN01OuacyS7m6JTRNiiXwJvWW0HalRQCsdFGJGsNSFrHujtlytSUGSafBrxhYyf5dGuQpX/pwxjzOCRUf9njFSkCAVRpRLw4veOx/mnExXlA8wk2X/wTl/OuB1GEkBJndKFaiuLwEtuwh1cfX/L7Ds8t8AoR1i728m6d5kla+Fh5ZU94xIUN15psv99rpg8wc+X1uzd6l+Gm9yGBUYodetLpaS7MouQUnU2k+CQ/3EAtYrMvwkIuGHLrTTXi+a+/fz/L0KJqVmAthJI1B+XCB+ZZ4GXw21cPBO1pU0xiF+iquwfvQphCTiuAqoxGUUH0M+QWlHXzj3AJLPnCSyKuC4GdgykVhql4pvLS8yqN0hrVDBYjpz3OEfV84fq88LdeQP8H/zXHvTNa597VS3xy4zUevHmTT/cLLzaJ1z/8Kn2/UI42jDrTFpjcqUdbBmsmhbZMyoDVtbafZyxvWCKrUNePyRDGwrF5CFPxFtzOMFpNab3uxKHoY8iBaDhjEVB7OLBYxzJJ0PtQRmcphexar283G23K4LDCHShBycorzxMIelAg234QfIw4vYN2k1Yl4apEA4uknmT2UtZAj++X4CZYAwqwCEyhxbjhCGR0R3xrHCOHL560BhZZBH2I1y8gTL+3Z4fRGYueczGRUdYbQxb7sV4MHz5SEXut63WPjsRETTzvkVZUvcuRBidb2IpnLS33bRGbL3wADilKBzW5R0cTXgkuOjXAMNlaSyu0nri6KNeLWV6FGrfWwpsihHXpDXNTxsAhyFMFxuyLo8QqAqtJblBmHHAbDK0nSzlcB+vtb4eOISzV4z21VA7x2/sUg9WS6CUxUudoWbjU4aunz7n5T/6Yy61Rl8GjacuLD7/G/nvf44/PXvD89Ix7dz7n+jtv8+Ybb4ncNInbkayTTYXObTAVufskg1oB0+eSUyElma8WjD5084OATYiC3pyEHLBXEZp8xTX+4sJ6B85u7kpaijFV0XQB9EY1OHRoCYwW618TSzmugDW8dKC8x9b+ch6D/xoeqw4/bnaTvPeQrnp48fES7YvUYE22cdGxnoa6iNevkK5fGgF574cE1rJ8AXAOyTnCpFl7AqkVX366K0Kvij4KJG+iC4e5pAXPnRGJwNGhpFRoox9EUARRqLfDX4goE2PM6kTcw5BkjHARRuabK5txRdkl8xdAmvKFKam5LjILOyv8ZWcjXazr+20G8yw8JllmaY1pEvjX+qpuNFmajV/q2sZK4lJHkpDPQC75wIRcX/yqZzjoNcwO7rtGCjHSoQ8MDPSltW8yUjdgS3O4Pp/y4fNzjv/5T/hrjxqFwmMqP37vTc6/9y02773Ln9y+y+7xUx48ecDlN68w3Txh5lS4UttpvEkDT13Ri70xRQYh1nWyR2EToSNRSyEZbHJRoR0ea79IwEodPAcrEhU0uno6j23AkO1ZR4zEEVb23oeKS1wbI8agVBLNO0d5ws3Jk9wWZIXnrPHtS1toqwDuVzxekSKgD5+QAlvgXyvIt54aFusVLQtWfr8dvnbVW7/c2oOccGqVc4vWiZIhDU8Hme7aZYyhj85NXcN6NK03SPchP/26icCSgTejlKIUHdD6MIAzQDv3IAD1JhrsOtPmFIi/X1zwvffD+jAx4b0xSPi6PorXuSyKmpqHS01oaG4cYgeaWfAAhvzoWVd8hA13g3g/h4l52TssfSGlQh8yqZDlGBCnYkprbHhiKYn9bj7IhtcOKAWOkgKFkdhGF65JiqAVZBJX4hDs6nAB0Ebxj/y+1ZGIQNczFdy5Mr/gnYcv+PCPPufWkx1nZfDk3Xf57Aff5A8ePuX9b34Xz4Wf3f6YJw9u00/3vPHWTW6+fpPd/pRu0LPFiOWHBKnBoE5arw7LCv5ggKuYJzOmKnxjWjuqog3AVItuxA6L6XWTLljjrYU9tFlI2bXCLiMAY3Q49TSoKbPfLTr8Rqg0ySJS2aBuivQB2fC+6L2ObYPlRDHYt5fviS8+Xo0i4NpFH/4VDnP+IamGdV11wSgcB3+8i59DGDHYSt6J/7jfL1rj+ZA4ZlUmtpWY43hTS9Vxson4YiNd9BMxTuh3L0g33l8Cs+LkW3f26ORKsUtf0MWzUqPNLgxNCF6COkX54yekdfeU6SasoVQlLPk687kuWpGJNBbEQH/orpbm4V8HMVww5oanRJ4yyyw13giw0ZFbjugD8iy01tlMsmjblqpGZZiwlamwdOf87Dw6Hj8oG6MrxRGISRJDUsBlOmQ69LFEkS+UQMQXC4WhG3MyZm8c9Upxx8aeqzv48NMnfOUnP+f1886nR5nf+c33OHvnFuc3XuPRkz1vf/f7vDh7yt3b93h27wE1Ge++f4vN0QY2zrPT50DCesKqtg/dG5b12kd3rR1XyTra8ixN2EmqUjGmlKhTZaw3dxws4JRQk6rDmhlm1ClR0kZcieS0ZTCPThkaNUu24EaoqCRLQSsvX7hHBrAs6qja0pV5CZLLW6IkY14WzF/1IgDRFl146Oeqi5J1137oli2Q8XGgCptFFPa6Z0enR0kXBo8HXzpiDkZQWMkSHCVLsVrT3lwnfzoAYj6cHIDbun7DdHMPFKMt0EsrRIVeritLE33YMmtkt6+rNywso1cXotW8NL6oKNRj9C6OQVOF16powUM7ICZegKrIQBQGVsMQdQRpJyX6WOT825w5cu/G0nWDdu2oxxhYEZU54XhEuhWX41IyJ9fENid2rja1TIV5ninyDouPNTIKGKRih5Y+pxzYQqxbV7TfG0sU+VgC0CocddR6W+LGMnPr8RnbH37MN54uzMC/fO8an37jPR5evsyV127y5NEpb926RdvtePLgCY9u36bWws03btJ84erJNW7fv6/shKWJd2/G4nvcBptU5ZKUMkaoKDsss0axWiq0QTek0GSQB8HuROAxK4DXYjyDaTsFeK1NlUcC0zQZqSWSqSNS6AuYBahbkUFI67EaXjumdersF4AzSBMS1nIy2X3FVYTYejJ7rIRCFBRHsF5ozKuBOq/A0RqCQfz3dfbxEOJAtGApsYzxEgg2wrhSF2ZCQphhotuWLC68RWEaQTDqPtaeRF1IzH5w4Uf4y4/OiNcyokSpeOVcWcNC8Isxx0Jwvhqo5oMnwsWkozWyTiU3cetrjucRtt6ULK3ApgoYMgs3nsKipglv4cacU3D+jdHXjETp5RMvvY+WmV9yCEokNkWfQ+5J+QKDQ0FbC3guSVkNq/Kyq81dJ3xLYhfmlClJy1JyZpOztPPWeWO3cONsx+u/80M+fLSjF+dnH77GJ994jydl4rln3nztDXKe+ODd6zy484Anjx/y8c9/ygcfvM31kxOW/Y7jq9e4//wxz3Z7mkeUeevM45ztVrv8lDI1RlMj0eeQtw/Zxa9g3n7fKNOqdN2LdcrK6ejCqILopa5w7U7VQYwcY2609866eEksTRjYKpTrYw7lqhyZ9PlwULcuy0zJOUZSdaY6X1wXzK94vBpFAMNy4AIHLRp6o4fINBcGHPEV692QJDoaHoh2oM8pJ1JO8nM/8AAEyhVbPe8JKqyHsy1xQwSjzSFH02UJWTsNx4ZrxrYVqIqnEoDbOq4kSwf0V+27thGbqcpEI2LMVq2+iEgXo5BDEJz0HjAuykgbAuXWDkj7+bBnS3rzfOnYpKxFCOOPlC8yF0yni6WOdQ+zUWJmH4GXhHVVl81VC0FQyZBKJg8Jk4RoVG0AamFNfS5J8WYj5tO1gK+RCMlCyl1yFL/gEHSnpsyRGRs6r58tvP3bv8etF+c0S/zwW+9w/8O3eHSSWFKjjs6xVy4fXWIZxt3P73D3k0958fwZ3/vud2jjjPP9OaVkdsvC42enzK5NkJy3JLcd3ZmSdAiW9FynsmHvyoZcSVJtP1hMd/TiLUaCCKYtiVzS4Zo1hkxYV7u8ETmQae1S1Ymqu1VxXpaFfSj/eu9BnFut2dQFLC2i7XMOGzkEXg5nylmBN67Iu3Vb8WWPV6QIrDf02o6nL4wA64WzzppK4ombN3gCLz/MjGIlCoBu4GIwrFNM1tUKYxjRFVg0CEqKwSzShWMkCCZgMqUAWxKLcG5rC3axvSghLTZE3Dk8M/Vvoui7DDAUupFpreN+4U2QS2GVRccP1h9zoi3jYBoywnCDw9q0h5VZY9rU8ANMjPCyby7PQfesGTeeY8YvxqaDUEdXY0r6s3uXVdcAC5tuLwLT+tJIpoDVdLRlP184LZOT5M/ryjAostIzXZCHXjZu7TlzQoI82Iw9339iXP6ff5eTfePZSeHhb32bH1875rR3tgwmd867c3ztBi/2zu7ZE+7dvcuu7fnq179CtsT5+Z7z83PeuPU2dx49pXdIKUxcAj9KsV1JmxQHgIhlY2nUVBhLwzGsFHoLS/CkDU5KMG0UWzcG9H0jJaP1hZwy8xChavVp6DkFb6NRS8ZdhXppuqb34TPYo3DkIBVJXSpS3Mqn6W0cPCRG00i4m/dsNhv1nd35pVvkC4+/iNHoeyiC7M24W/9Ld//7ZnYD+AfAV4CPgX/f3R+b+sC/jwxHz4C/5+6/++f8EpxBqYr1Wq394nrUCeyIAhoMwtZ6VFmh+bZmzKP23VzfX1ISTTNp++B9CLl1J0+bA6ItkcwgNWeYsTRFcq0AnmedWJs6aU4Nckpf0XZ7aZsRV/PqWbAq6TRCIMdes0N1t1iNKpRSpyVxkrgh+mvXKWFAW6QhFzLhetXeqSUBjbJJHB1Nsd/vmBWWeXAanv+9XzAm3ST/zTlcdyxSjpEduJkizN3V+tMGs+/xmjQy5a507OYyeRmwRwk4I60FOyk4MsxfPBB4S8EFGIGadcCNae4sU+LrTxe+8rs/4p0nZzzJMx//3V/n/ms3uZOc3TjHUmcZBTjm6OQqxws8ffwL7n72iHI08e0ffJfnj55w+uwp+7lx8+13uffoCa07NW/Bu0JgXUvmzVTINZMHRPuGecZSYZ4brQ2W3hm2yr8LjB4+ga44N29fUDmuY8PoQWpDN2utyHo8tlcWfBTvxm7ptK6cR3KF0eKzlVald/lijGU5ULzdFQpjVkkMap7Y76WFYcTm4lc8/iKdQAP+E3f/XTO7DPwzM/uHwN/jryiP0AzCHZtSkmyTNBYfSCg6Opxpo4jvUrWiavNF/kAPpBxbLbtTkCqcqYTQpeqjKMFUKyWztLggTXHVy9LZHG0OKD6obc3biR4f3GaT5WbbLEJGUKCoO93Sob1LKaK5TbLRlE1tes1iIg4LEs2ImzaKFRx2zt3AzZjjbZBBp4Glg9/gphYyg2mj1J/t1igm/vncZhKwyqkOclU8iuV6GUQRau3C6mzlbiB34GZDQpgwqhBt+sJrYKS41H1E8QjRVUhmd+d7ehsMN2oqJG/sChKMdWc3GrfOZ279i8/46N4Tyjz40a1rPPxb3+H5FjgG381Uyyy+YXbjxslVTraXuP/ZfT7+ySe888EHXL1+jQcP7jGfnvH80UM+/NZ3ePr8GUPBD7q+hgRAFnhNd7DhzA4FWYUZogvv+6BhdMuACiPDA4uW1LzWEpF46qV6a5K/93APzko/Gga5NRKNqRT2i7OdRCAbdPE7fDDoCnKJa7CkTCZDznRgpBQrZ4GVIP8Kc5jbXh1jdyoRo/f/tQhEbsDn8efnZvZDFC32V5pHWF6iNaacKfQ4HMTae9lqrBYhZEZm5MzZvoWmwMSjJgpfdnLNlCRgKud0AAtXu+dcUryJCVtUSLbbunKSAMSDdyDJm3+Zg51nAuXaEoxCNOulLERZH4tAopRid+tOmWoUIs2/Av5eWpGO1Rb9pZAPM1JvOixZac9D400ypgTbqVKmhNlCKY1qMLpRPIkJGO9jiZ/rEeM2XAy1HMDiNE2HLmRpiy66Ea1VEnCQLePJmGqltU6tlfPdwvl+T+9E7gCk5LTR1CX0xjRVanF2y8KwRp42bM+cMozRT/nas3N+45//iNcf7/nR+2/wB7/5dZ5eco422mKks1M2rhsRT1y5fJVt3XL37gM+/eQTfuNv/k3Ozk55dv8+zx7eZ9dm3n3/HR4/fUJ3p24m6TXGoGapJVe5OEhfIXOUTp0yGehJN7F8KLR/ITQs6zYnWRJT1MRG9RE5D8SmBWM+nw/jo3wZdPgpZGRIxVrUuY6SmNzokrCIHRjYSUkJ6+IKlLgeAzI6ROgdeCRxDf5ZGWH/SpiAmX0F+AHwf/KXzCO0l2LIyuZYdNiAv0sx0SZ9Te0NhRseYJ9uzN5lSllGZnGh/cH3VaIN8pbfHG2CVnmB4rtLzOM4NcuyK21r8OKFH0g6G3HRxCncYNroJrEky7OSO/OyhPzVeTnuJacoPF3pO2qFG7lUfWg5HU5frdMkEjJgBHjpYU5azBjNhVXoGWHBpSjZo+OBupGhJ6MHYGfMYTCif3OgSYUd97YwOa1ERwh9VmJSb11fxwVWM9yZl4XtVISMd7WeY8habVlmppIpxZCvbrSkQYraTMruy91oBY7Pdnzl/nO+8cPbXPLMj775Ln/w0Ts8PgmzzFhVlpLpc2Og4JKrJ9f47NO73L9zl1/79R+wOzvj+bPHPH/0kPn0jDfefp3t0TH7szNSzhGCElHopozJMcZhJLEAdUErwZGVKu0+WBbd1DmuCYtVs48W7NEmIHhdf4bQTXkniWm9zhBWkyJENOUirUGpAmTxg7/DSiPZliIKeffAgcQnmZfwwnAHT4dryON6xaTb+CvhCZjZCfDfA/+xuz97eR3m/q+eR+gvxZAdX73puhAjEmt0SiqYFebeDmuVnDLFjFoLJcW2D6OGEu9lS+tiULNRk2iUJRcRbcLzH+OwTuxmooUeNg6a5zNyyG2RKpQMLBeI/a9uFGnZS1EgR4uwj94Hm82kdBnTCTpoJCvUrFY7l6J+IXzmdPoL7zCIFCRjBQNS0645de2Zk1A6ElBzouTBNMn/TuBmYtl3znadgZSLyQiMRLjErjdWM5aUqzCXIhBqzGpF5RModySP0QdgMx2x+guIaivTC5o6nt7Hwfq8LcH4w2P/bUzTRNvNvDGf8td/92Nu3dvzyfXE//WdD/n45mW2qZLrwhGVyU3inQzUgtmW1y7d4OGD5zx78pyvf/3rPH5wn/3Zcx7ev09yuPX+La6/cZMX845tnViCKdqHY8V0U8dnnl6yds+WNQoYBxl0j2uojUEbERcuYQeeEmlI2owZbZ5ZNbErKzSZH4psqZMMaLLGipQjeZksezk85OtDOg9LYE1pxdkZw9jv5a2w6muccCbqFzb5azJUcg4jxZc9/kJFwMwqKgD/rbv/D/HXf+k8wpcfm0l21yN2yT2ccTLpwJ2nD8rRVtXRRJNchlNqwmwTF2wYgyT5tGek9U+YUoLLKnZRl9GDIbei/3PbqdXvg5RlpT3lGtLftVtJYZelNF1ypMrmSsoC2mpVgdpMNfj/Bc9FNxlo1dRGKBRlXKJgzk6e8oFVZ6b15jRNlDSY9+ta8SUAMifcVrLPQqkCrpbmnM+N873krFOuERd+sdpMYRpasxJxUzb6IpXkZjOx38+sCk2ILiHMVlbikyWoOdOTsxmFZZl14/SF7eYS3gmD1NX8RM7AJ8C7+8FH/8uP2Cwzv/fhVX704S2eHB1zqSwcb6Fvj3CfmVLFq/CXKW8ofomzpzvOXux5/bU3ePr4KafPH3P/zm1ev36Dazeu8c77H+iUT2BpIY8OvQfKj2zNYu+sFa5Wsa3NJLQK7q0jVaexbzOUHEatmd35HuixfdGWqQ1RsYWUDLbTkYp0igJmRvYehrXp0FW1rk5H4iLNojVZRMd1KKbxKaLr82QsLo/Fuc8qAMODlBZVeuWUwOH6/bLHX2Q7YMB/BfzQ3f/zl/7Tmkf4n/H/ziP8j8zsv0OA4J+bR5iAba5qFZOsuXIuzPOeNaEnnoxScbMEMQlnU2BM5RAJnUqi7WdVXzRMjUT48un7ltC9q/PSrNm9s5v3ukGzGmbChGQFCN0sTCoEJNrIHJycg7o7wmpbTkIG3inVVNV9VZmZZs+UUdp4VGs8+AyZkgvLPEexGpgv5DSYstPbgud02Eq4aV2UTN6IOUm55j3hXkh07fRNl4TCTD0ISAdCNik5kzm7tOr5nZr1PEck2eRwLiZFWnGWnkP2yzOTgdVE8oViAv58MaxBSc5pHpRWSXPjo/uPef1//2MuLVv+j3/ja/z49RN631I2DS8ZauYoJ3I6IdEECJNJeWK3E9Pv5NKWZw8f0Zcddz77nLfefJtL2w2Xr5xwcpx59uSMDY5XyE3jYLVC752zuZHLGvu+2sw3ig2GJ+ZZng4O0FN8xlodD5/ZNYmvRu+kKtbqcPBu+NBq2U3YFbjMQ7zLHKR3PGTBbenMfVBGwqcMzXGTnVstG3pXurHZYPhCcmPKGfEwY8OyrIG06UBA87HECHSxrPiyx1+kE/gt4D8E/qWZ/fP4u/+Uv8o8QoPeFupmitkXRhvhgKsKpxY7aK7oRE5Bykgd6mY6sAdLUC/NklRVFgVhnYGzOgaFj2Z2y16z77prlRGf5KRmNDgoDde7fo3o8iBkrAIaGZ1wiJVq8XXFElORpNOItn9ZyK55uawMvNCKa0mQIu67KIK8Gyl1tlNmPyt8oxhsJrHqSjVRRXs/EJB6U5CIaMGdzVQFhvbB0gfbauzDtcgx5iGQVHyNSMopRsOwVHUKhuvPvOxJJMpUJCoqWvGWNBhZSccp3v+97ehs2MwTmzHzvd/7ER/cfsJ8suFP/90f8EkZzJZpM1yZjJIG25o4mjR+uU0kd/bzYLM9YtpsWFLns09+wbNHj3j2+Alf+9pXySVRk/Pazaucnz1nqmClsOmJfelMPXG239OA6ViuVSsJq6fMvjvdjEbCLSnwFGcse0DgW/fo5kzJyD6csSy4KdDWhsDD4lDj5E+IzOUYS2tRSGQi2/ugOZwvC5s1IMOcXLSxmOqEzCe12m443hukQpvbQRSWYs2MX3BMWptJVg9iti97/EW2A/+EX11I/sryCHPRC5TF9mo2seh6XrMGLAGJ1nX6lDHIw5hyYemdEjv3ETM2Y9UADNpopCYHm9bUDvoQYDKGblZ3haJaytSSQun1kidAlk7hABS6hE0rW0vtu4gnLZ5PKdoEeMqy/0KdhEwzQ0swnFK0AlpGCwaAHxh1yeRVN5WKRyCpthpJF1mCzSaR40QWgh0S6WAQvixaGr1TpsqYF7o523g9ZhqgGoOSnGLir2+nzL51ofxF1l6KG4N9AKkEM82ScTQVYQ1Bd2bIY7+ac+P5C776pz/nW794ymd/7U2e/Y2P+PFJIZ/Cyej0urBJGqOmlOSe40peNhI1Z7blEo8fP+f09IzHjx4y2sJ3v/cdTk+fYW5cunJMY8ZyU1s+9D4JzHfyZmLujfnweazqvhQDpDEaLCHx7SE6Wz0snAtD22wpxg0jhdGpMgcXaoZM18YIbQs6YvKBnJ7lMSHXJQd2y45pEluxupShc9uzqeIk1NAdOFkCrFxIaYi1uRqzpNDbWKRcjz/jDuYVYQw6inYuJDytzrnKfD8oqU2ijGIK2zQv2MjQ+ktyX613ck7M80wKgYYsnIK0MwQCtfUC+ALfXxdtGoNl8Qsd/yoyAlLRz7EUe+CVtejEKS43HaJw4fHvQU01E1BZi0BPc7CaDyajCbSS623FqMUjQESpFKu7qYj1mFiZaCu4qCwGUjgmIYwkvXQVpCwOQ6nimY/eZRYyixG3SoU1ymi1uskFXxrLoqDW0S5UkrOpFS0l05eZEnbafaACF4KmG33m1//pj3n7bMfHN4/49G9/h+elMPXKnGZmFjbeyXkjTkUSQawrrphldhKF/fnCs0ePePL0Ka01vv3RN3n25DFYp5TK5deusWvnmDc2JZNIZKukYkyWxYMwY9iGEaE0OctQxTAgR5NEAAAgAElEQVSKG80beUSmXxdRarjLuCNYpQmtPYuQVqaS2RbJm0uujLZoI8BKkgrezhCe0wITUgJ2ClBSRq95/fktZNvdGaQoRoYvznBtJOauQ0USmZidvStjMpmCbP1VNxVxWSvVkulhOQVqg+ZlAe8Xs2sSI2vYCKqtRD9yJfKg4MaPPfgPciFvtUEL4Kv7ypdfbb+DmhxjxBi6yMPdnD46kyeWZabWSQh85BH0sTodqVsZbc2LN0oJq/LYBw8f9NGC8KP46k6PJGNdlKMpTHO0QZ1MISrhEZCTYT5CuKMuygLYaiGNrqUwSFw6PuJstzD7RQLNGmM2XN53UxGFtUyF1gXuG53kkdxrF6avIPOS/b6By55sDGcqIs9sNlUeg1GM+tkgD+f1fec3/tEfwnLOH71zk/v/9vcZJ5e5CuxbYyGxPa+0spFysa3ahriI50ZOR9Ayn312m198/DOuXr/Or/3g13l47y7zfMZ+/4L3v/Yt9mOP95lSTYEusV52v3CkkudDpybI7nhyRutM2WiucE9LiWVeoGxZhgBC3atrMTfwSimFqSreTaCfKNEj1wPHv3snhUw6hZ9iqUe03kjmLKpzuBVyJtyWBpksTkawS3PO9L3wgr7v2phlYz68tgufjdiWw2jEKfSlj1ejCCCSw7IsbKpilkvOB5fc7hE4kcR0W9twrUCgz/NhleceYqPOocK30WFWcm2ZqmjHvQehpcep7cEFF7utj8HSW2QFCECqZcM8N3I2lv3yktJRxJEVcW+jy0Qk9PK7ZWbT5TdXdS5hLi5Dh+DTS78/t6Y1Fgl7CUXeu4xBJKbqbKbADtCH31wUaYs0yu6OM5Ozs6kejsyJMZrIPEWzviURjvBBLYnclebjrSv+2kLt6DDPe3Vg0UKDjCytOfXyRC1O7o5bI9UNfSnAzLfunXLrf/sDtovxw3/nb/DzNy5x4+gS09LJU2VTBPTNVumtQ3LmDj02PG6diHPi2cNH3Pv8Ht/43rc5vnSJe59+yvmzpyzLGd/47tfpNPbLHGv24N63GYq6IfNOH8op9B7vWXacJjanZRbrHBUBoz2XCGctweIcIRdWUlPN8q2cNlOwMKPIt04zOJtnRlFGYsaUChVmrB0Yo9BHkIemQvcF752SCzknPLgtaSQVhFEwk17Agup+vp/13OQ6Q6SdQ6wOCVerX/V4JYrACrKkl1rzEUCcu9xUV0eXYmrhD574QwSOZVniJow1Yay05qGZbCDjhVWMxNo+WVaVBowhSmt3YIT7jTQKfQxSkzQ0Z20wLjrs9bm6jEKJtd1QV5KSkWq++FICWKxFir2hNd3qDLS222YFvMdzRtLgYBO2NqjThQbBTHTnlAY54sFKyYewFY3mUvfpPQ93nhxmKEmv/5ACYIM6VRhhWZ6q9Oyjh9GFMbfO8VTY1kJxuHx0RHaYs9FO9xzZ4PW7z3j3d/6EGzP85Ne+wp3jDce2ZdREsixjVkzbkDZrydAHPQ363pk2W5zBpemEp09fcPfOXd58601Ojo95fP8+89kLXrx4yjvvvUXaZOY205M0AWDkKMx9t6OkTO2a6S2cpFc362SJUmT3vgnXIIa4Fv2wXnPWbakShgslSEPZEqVUzNQZLraok0mJXZsBZ5uL1rQx6K2fQx9DFuJm9CSOQg5J8jBdMjVUlj6a/BoT8Rr1eS2RRoyt5CRQ5qMOt8PM/CWPV6IIgKrYmjqTiy6MlPVBrN55KRVZcUWmoK8rMtS2r7HlavVXX74q0DBlNsnCzJMD6NYXGTXKkkDzmHuLLYDWN76ys/qeUgr7pR2onjlFixga8D60thnoRMO7cuPGQqFoBmxyie3uIosES60xSIVD8EfJKRhi2v/3wAfog+2UoLvyDDw85JzgVsxsNpp3q0EvMHVozeVDsHQGisJiGVBQFkM2SPL1TyuTzpxaK7smheWud5meOhxtKtN2w3FNbAitfIGTsaHYOV+/d8qN3/5DplL44994j5++8xovLh2zKXBscmnOQzPvKJUxN1LpnI9w4mUwOkzTxLP7L/jkk9u8/8EHnFza8vD2Z5y/eMrZ6XNuffUWN968xvP5HJtQi43s5IqJHNTnmZoL1U2egQfnoLgZExRb8yszfe6UTUFp1eJ3gAqAkpnKYVOEGbWU8KcUul9yYvYO1ZDoY3Ble4mJYJFi6kB7V1EfsYXIRq8q7CNMSlpvMrC1BLkqTamHPsUXWhsclMQ4iw9qPDdHmZd/hnTgFSkCwSAT1BTc/kDHQadmjpuGg4nlCqTJez6F0k2YgDM8TusgHyUTm98JQk5WK9sHByrpaGFsEkDeiLl5oBkvZ2OJfazIQI6ZUn1SLrQlTLXcJZixyEGgQ9lEXqFyCHpXqy/8Y/VBgG6y5h7ItjyHHbpZPhS5VVh18f4ZNnSxpCREeGnStTudKbCD1huDQZk20S8OoALyTlxJTWIVDmpWzHdOiYLIQ8NntaopAmTNGKIs4nmNVd/xNx906v/0+zTf8JO/82v8yfVKWoo6sJLx1ummEzcbTLWw3U6M/XmorgWW5ZSZd3D37gN+8IPf5NHD+9y/c58ndx9iNnjn/Q/46re/waf3b3PWxJHPRkj3nG66ZnoCPDozT5SsgXLlTMgmPAUrYLA5KhRS4CfG6EqlWkchHzCC2ZEshRs05GJxDXeIzda02ZAtsUmFTVDCLcnCLaVCSvIy6EMr6H2bGWS6XbhVrR6TMBSEOxo2BhPivvjqPelaL3cXKUu3STp0zl/2eDWKAOGrh1OnC351J3aeyZjbcsAFNML2iwBPd+1Dk4CTNcQzrUYZveG5sl96XKTqMMbq1+/6MNswtfPBVFzjsYi1Y/dOSUiN2AdmawrQUICpibqZWeW6ITNF/nC6TgJ30A/WueE6fUmJUjPz0vXJOLIEMzXvVgxvnVoqUzV87Emm8WE377H4s4BPKRHXABe1PqLLzm3maFPpo1HLxWubag61Xz+kO9U60Ye4G56SPLcdEoNNnoRxuBqKOje2deKtFztO/8d/zKVRefF3vsudt66S5sYuq9Cwc863xsbQzts7+/3M6LOA0mK0WUEsxYzT56e8/+GHnJ2esj/f8/ThE5Y2ePvdd7jx9js8ePGCF/sFpzKWxg7YFPkkiC0btnBDFUI6iRUEjlXaWjySGKqZhPKODUIBuqbHtdXe3cKY1i5csi0YmDKL1g2aa8XctDp8aZQtWRJ4Syk0Yp3WoaYNsy+sE+doOlRGU5CLIVJQjjJUS2K3m8P/Yj1NOGBDydXR/arHK1MERrTWjh/ILJspc7qTTHLpPaLARWwpIX81C7HNkLGCkQ400BUtTZi01rmI0cUqeAm/QoTuq3FYZ3uP01Zfm3OK9RCwdNgEycfEJMs50ZZ1DSPMwdHX2hT8hiZqrwcq33tjJAGUMu8QYWdTMnPT7Np9CTWa423tYJpuzCzrKe+OJT2f3pVUVCwxL/3QSdQMPXITp1oD8CuSQSeBTnK4gZyqiFiI8786OecqjnwyOQhlnDR3gU51wyZtef35zKX/5h9zJW24+1sf8kdf2XDazjCH7WbD0o2UHc/OPAbeBAYv3mgE7TUwllorL56ecuP6TXzAwwcPuffpHbbTxFvvfpWjKydMl65x+7OP8Vw1Q3dnZBF9LDIbFRONhIdc0MbNwxQkrp/skLpD3jAYNLcA/gwschhRXFwfEQ5jFzmSHoxWyxIiZRPa3yKMJQWIDKbcgbZcXKNx/TWHNpwlxtA+lFIk0WC5iNwLBWkOYWchsYR0fP0ta5DML1v0//Lj1SkChHgoSaiz2SR2s/5uGcuB9OEjNHDWYn+eZPWVLVhYDqbKKveaQIjNwFt8BFG9h5Dc0fzgkguQ3ORxF0gw3kQjMfkd1FLE9qsvSVD7wjCtIXtXW0dXVh5waNXnJhTeW5N9umnfm9d0JHfNii4E24I8JWBUBceyuArDweL96EPmpgW50MiBNgwrCUFWgik6rHy4UFfjFJC+XexF0Joqp0FrKhh9AS+DvigpJ9XCUo3Z4NLceOfpM678w/+boxme/ge/xac3KiyQ+0xPg3nZRQEGz42eOxljvzSaizq7a0uYmhiJyrUrR8xnO549ec5nn9zh6sk1btx4jXp8xOb4mIePnzGImLQh6TTmeBPWkYM0k7JeB1XtPWieHu6MnCVTDrm6YsPC9MX0vq4PeVsqCcm6fqdwqS6HaddqVGMZ4IEBxAZGfyXjWGe1uR+H7kCuwqIr9wgrAbGy142fvu5iFWgpkXLBesPpB7B8Ld6/GhLU45UoAtoO6BQygi+wLIe/ExB4sYZzLqzFCN+BNRFo5YGnJCDLTB+qAcT32EstmTLe0kFg4S99LcND8CMmY01qi80bUzVgMLewJ4ODU6+b2jG1bbHBGMY+d4pnqmc8SRadY63XotVbx5kxN31fVoE8PK+gPjsr0Un8QgJcXPqA5sHnN8aaery2rCkxJSkxg0Mdvgr5gKQndJHVnLR6rJm26HW5Gx3NsfvW6KGSvHJ+yvE/+iNuPN5z/u/9Jj97o3Jq0M529Bxuyy70nSDMLGMvxDt5qDuNxQfMRu7Ga5cvMT8/Zz4949NPP+eN19/ktWs32e13zL1z7dIxD55+RksK9dQNAe5dRdH03loCxgXP32oNBytxEHoUeD3HDEMJS+aZFOtqostMKfIUPOv09Tn4KBprcmxiXhZoyQlaeMnqI7kyKYkiUELl5wFYX+wP9ChZFOX15l/3/uth9vKmYy0Ah4evvpdf/ngligAmZ5ypFKUx+8BkAgSTsbQQBnWBeGkISFEy0IU6ag3JdL9YAYogpJs0WTkgaheRTvF2jrX9Vzy6rdXZoCTJf2tpAezI1KOZVjNOgHZioUgp1zqbaWK1F1A2nBKQdrO09lhimfdMm3LwTByj441wHFJL76abHvfYlLg6IpOSUu2m5MluCgxJniiTos0sJ3ItbLbiGdScmUoNVxoFsPbWSXmiJpPwZKNLQ1oKF9PSEvv9jnnoe2o26r5xgvHe7/+cd57t+fz7b/Pjb15mg5HbIB1V8tIZrhi49T3ezwslZ+ZlFv+DTGt7oIJXXr/+GvvTHfc+v8u9z+9z6/2vcnJ8hf3ZjqV1rr91zMP9I5YjdUi9Qx01nIAdy1V03z4ovkjiPHRzzMtC0ZIJL53WHAunX91o4diUYPHO6IlNyuGnciER9gCLW+sHm7aDPblnUtIoYOvMAV84hFYpe44TW4cFQSMv9Hk+FAK5bYVdnUNNiSVsyTh0BXyhAxCwLCKZfaGkfPHxahSBODFFxBAVM5Uw9DB5v62uP2LwSV47Rju88FhuI+KO1H8ppUOgp8FhhnvZIdhM6TjymlsLg180gB57ax9MplOgmIfMWKfDMssnQPwFfVvOF8DcajXmTfvresirM3KZDqs9i6O+9wYp0+Y5pL5xgtgguQBRgp7cWpM4KmSvpRQ2RVrjvjTqNgcCL41BrUWUVA+HI5dAaz05+nDqJDGWNiZqcfet0xoQ663eFnofXFl2fPT5Kd/4+VM+/7e+xs9+7S28wb7COErkM8eaEHTMGd1F1HGjnc8X/oY0shX6fubatetYH9z5/HPu3rnLNz76NmYT58+eszvfc+Xt68zTwnM7x7cCzspI+OzkWumzvAyaxelPtMcO3heaJUYQdohg0LUH6uZ4zYxlpqakTch6zdgadW/KFUiOLwvYCPrxAqOEndyQujDXGPO0ElyJRuo+VNh1QKmTSwFm9t5lkrOe4sH7aG11ERJuMsYQuIgFiihKO4ML3CyKx696vCJFgLCiGnKBtUFxrfLCEUvz+qG1DhDNL74Xgna5VoQQzahj0JbA8RgbnDWzYIS/oHl0xxopJT82gS655iDz6OZyF0hn2EE6DOtJHhz+HMzGfPE8kxnJoc2NciSUvbXGtK0BTmkskq1XpNyOi/bQo+WLwHQoUKxIGl2MWrfSv5tMKY5PtrrZSwGTldpoC9QinMTX9RhBORbllUWnXbVEngpjr66qR4T5CF1DYvCdh42v/MltfnEz8adfu8H5gC0OGcq+y/dxk7HZMFvbZmPey6E4xY5cTMhGzYWSjCePHvHg3n2++dFHHJ1c5t7nD3j2+DnZMpdfu8y9/pReOr4JGu5+6J8J8ISctSSFXk9KFXfpRnKscdcTGEfmrqakahm65ANOY+Go9LK3wup0bQZtntl3WZ+LKTBRMvhYMNOK8KIj0Ke52o5pe6F49eazNCv0w+80CJbhuNhuxT1PdFfK3lhHoPiPcSCZ/dJ48EuPV6MIOHjTbCNTTWdXF0YTd9o6+v9w0nDO94sy4J0AsVZENMWN3rExDrLcbMEpSCXYXx6UX82M60UwwnUYAvVd2UhdbbgPyVtVtQf7yBVcibQJx3KhUOiu/Xpi6NRe53KPldDQJqJU2XFnIXMqBFH4clYCcLaVUTgOVlTkTkuwqVleDHGhe9iV4c6GTMoDcsO9YWjkypE+1N3pXIibVqNTI5FsMMae1p02xHdZYtVYcsX2C1/rC9//4S94Xjb8/De/zv1NYcKw1qjzQIz1obGuxHqsy53Yq8I1fISctmlcu3LtJg/vPOH+3Xt85/t/nd6c+58/5Om9J4ycefdb7/FovKAfGXlTGJNHSrHHarjScoK50saMTU7OSmXu3vGsTUt3+QIkcmhROrtlR5k2CmHJcmJSk7VniQSKnGQTn0js56bCGDhVc2due0qB3PZMVKZ8JAOaTKQUaTUpYxeNF1MVsGlu1Bj7KhZiI5cXoXZ+jGTMIxKixyITV2SAk0xbghHdhQRF6QsY2Jc9XokiMNyZu9hsGUJ1prZ+uC5CN7XJu92CJbmrgLGMRg3QYzSt8jQjCAiz+PlyjBHYlnLWDrUtKzajU6RdtMUHNNZdZKIkz7k+unLiXLNowmg4NUC+vpp5rtHUw8lha9YJNxsPK6qk4NLkSSnMPVp8GwdHnNEFeuUk4soaQbUplZITNUWUGiIUmWX2i5xmLQs8zLlCqvKfJ4UFmh7ZJFg6+B/2Jg4FQy5CKeMNNovL+IJMHY3rW+Oj3/4xL1riD3/wBn98DMfne8rGWFLCLVOmTK1ZF7EXzs72SviZmwgtfdA6ZJtIblw9ucnZ88a9ey/43vf+BmNeePDZXR7ce8TR1Ut87XtfpR139n2GSwW2TjoGFlPISuvQBz3HqZ+kCOz9Qu0gSrhK9uiO2wi2qVSAy5ADsK9mM0Ef9/UgCan2IRm6D5a2ZzekWfAYPjdFbeSwFuQq9JpHDyZmZAYmYTjVJViS+GhIUGYGee1I/XDUVdEHaWS2ybl2+QQ7P+N8j8YHy7RFtnyeHfrKwPzyxytRBEDgXw9tQPMRN06QeYDdfM7cpBy0vu7URXUdY13dpNjZAuEmnCyrWq/zl4tGmdLqhqsPckSruwIoa4BkB2LBy9IdzyLjZEuH9JwaoJJOBF0cqxZC44DGk2RiPeZV+szFPrePyKIPfGQzTZrVJ0V7y41Zha9mWUiXVKnWGG3RehUZqxaTnXmtMtbsLvZaojAgsASFn1gbarNQ4cnJNFea9O4+BqNHhFuWo+42NW796X1unQ3+2a+9w09f29CGOrb9aBSb9B566Cay0efGtsDSOs17bEZkfz4aTGzxnnly7yG//hv/JrTO3QePuPPZfUhw6c0r3PjgJj+981P8JJFPYExGzXtarsxtUI43nJ3t6Rby6maMQnwe4G4B5HkAaeE/gf49h/S8DYnInOAtjEEygX45VbrPcYonhjfaGCzLwjwvjCSHbENdZjmaJOwJcG64HxKZox4d2nfTzlcdpV34A8qNGrWJPsK8ZVCyrNo3BY6r2GXzSmRCjERDfIu/lKnIv47Hqsd3z8xNmvB534PxNALlNVpIhz0YbCsA4raah8AqEU7r1Gor5XZo70+86cMDeEFMuGAQrCGnHjPfaklGsvDRH7HWkvBDqkZjGWKJGRGBhol3jh9udMMFMuiTF6nECNpoRHhb4Xib2Y9GbmEhOUaMCMbqcQimNOEqBHgf+YCruGpVG+KNooV5JNGMWEc6dCPRYsXZDt6O+7mzOdrSusBYC+rtQFZnX//pPb77J4/5yTtH/NEHl3haM0fD2HnnslXaLK3GGJCzq82ditKdADW3ztFUKZZo+8Lx5gqPH77gww8/Yv9ix73P73Pn9qdceeMKx69d4tZ3P+CT57fZHS/0o8E0JU5yY8MZe69w6YRlDPo06EvXZ9rkFKywWGVZLEtjChbksu/qtoBaCvu2UIvRh/CK3aK5HIeNZUpSq5pG1kYCtHFwZTC0plAYx6jJ8Sr26/DOYntqmrTeblqvjvCamLJ0Ix6A1JpXASoMwrAKoM1FQ2NkXxamDKl3pikxuxiLjq7vQ1LVGKT/PzAGaT1UT1qL9SGyx9KE7WqNbwfn1OTaw69y4rUAtCYGXh+EoMO0CrOVYKE3w2JtaIHWj95Z01zWnwsCiabVz8/lqEuKpi9ldSxDHYyxgnBSJ2JaVbZA9G1F6LMxlUqyEsVC7kEluovUDbPKwpAseehEaH0wrNOXDnmQaqK4UzeJlDKt6WLZBvWX0ZlSZnjjYpNqpDHIwTD0SHxKIVbqsdJq3dj3HmtE6HSmbrx5/znf/8MHPNgMfvTtr7DLiRMSzRY8V+ZmbOP9LyT6LNfl1hYpKU2teB3Cwm1AKhu8J95+5z128+Dpnc+5f+9zbr57lZM3rsHlTHltw9O7LxgnznbTOBpnHCW4xJ46FpzBWT3Bjo1xrlFrLE5J0PpCOa5RlIJ9F+zTgbCR1hb5IwI52KYlFcayyOVX9CzxDgITSmjP2Jcl0HmjFFmwj6FuQAhzCtlvx5kIFBIzeUYsvYeZDdTIc1iZjYQ2IWJxo3uMw8GEF0zVmJtTpkQeMoGtJbPfN8mp80VU3pc9/jwyEWa2NbN/+v8w92a/lqVpetfv/Ya19j7nxIl5yoycKofqclW7C7vdmLmx5BuwgAsjWyDkC/8BSBYC+Q4kuPAVIIHEreGmGSRfAEJIHmQZC0/ddrtd7Wp3zZmRmTFHnGnvvb7h5eL59omyqaQKV4NyS6mMzIzcEbH3Wt9632c0s980s2+Z2X8y/v17ZvY3zew7Zvbfm2kGNLN5/PN3xn9/96ceAC6Hm7c+gLs+QkN040b26b5DiOPqfjN3Yg/sK5ba3ia8P1dq/TE11gBalBsOrZNxZutkd6ZgzDFd0jLmjeDtdXuQadzOKY3TXxWP3sqAI/XMl41TfgJ5CwJTnonTxLyaOT465NrRIYdTZs7GFEcqck8kMqGNgKvBOfcmdV51p7hRuo38gYhXo/fEbtvoLUqPUHfUulVBAp1GlYjEh5ipu5xoDkuvbDtUIp1IcRfuETq77Rm9FVro9Kb0mqUuvPeD5+xC5+MPb/F8nvDahv9JYZe1LRTJaagDt1mWneS81S/BMG872WLThIfArTt3iSTOnr3k8dPHHNw44vDONTiKXL19lScXj4jHiRQKc9uxrlvmds7EObNdkOoFMwvdKmGd8BEK0+pgUJaRGtwY646emgoXFfDazOio2ap34TatapryUT2/L5bF9m3TiRgnvCnKrJdOWSQg6q1f9kJoQgvKKvTGHDtTCFAbzfX5ljpWzgax6+AIpodKHIxPdI0eIYEnpwbHUiKGEeQStT7O0VjlyHoe2FH6+cRCO+CPuPvZiB7/P8zsfwP+DPCfu/uvmdl/A/xpVDn2p4EX7v6Bmf1J4M8Bf+KnHwRDuksfZo59eEgYiiiGXTeSgsnIE4azsKnPbR/UaUM6GlMYWX/hcgVgoK8M9VZvjXW8xPblJKuVbR9csI2Tdy/KAMJI3N2Xpeh3qQaffbQ3AwtIGlHIk/jmVdZmHqIcjbXoxlxKG5JozSANKN0prj9DAOp4DljdY79glaEBUNqQhc5qTix1x5Qjl4GjSxsTilF6uTw0VX65Yc7TODR9hGho8slAd+OoOB98/4T3H2742x9e5zsPbvIi9uFzGkBcAu+NXmHrGx2YUyaGwG5R+04pC5qwoPdI2TWuH93m5PFLLk52PHz0Q+68e49rN65w1k6JB8Z8b82nLx6zSjsi5xyw5TguzL7h0DdkZuIc2V6cc3FwFV+gBx8JwEUFHT5q3kxS9NchGyaQ2ZVJMa0y1fRZpqQw29Y6LbnARGT48t5xn/FaoTvzcIZiYGFSC5VFpQ/tMy/HKw5BXGuOh85SlQfhpvyLaRrmOfz1+mntkjay4Cy9svNGaZ3qwr3MnGyagL263KpVxShlqXzR62cJGnXgbPxjHn858EeAf2f8+z8P/MfoEPg3x48B/ifgvzIz8/+neQRRfRETGu199Aoq+aXHvSAokIKQ12xxIOCBWCtnmx05JayJYbCo/TxNGvWH1gPMLy/aCqxiIo8MQovy+ntIxKLxO0Qb7rt9XoG8BN4dm0QW4Z2UEikpVVgutTD04wJ6IkaOXU/+IHFI6dCKwDJQ6q+0/opVL7WxLdLX11rxKNCzu+uiNhu7qXLr0zAHlbYQUxix4tIxlFZJIXC22Qgo8gGONh1yW1/wppKRVAN17qQ89BMkHpxv+eB3n/HowPj1+1e5YOJgW1nmThrceES8Og51KQK/WuPg4JBdaUAbIKwTmhKT1utjfAub52d88vAT7n31TQ7vHnG+nLOLO958+w4/evUj1mnL3E9Zh8LazzloF6xTgdPO+kBx7odmnIcVfV7Rkta7WkHAUcOtMuUwHKCKnmcAsTR9ntutlIwWVACbU8KtM4dMD8PUs18Omq6x3pRkFF/vpaJiwz5RKMis1YCo+Sz6aBdKgdIkTGneh8tTNKoNQ12yPpqN1E/YTdNa7U4Z+FSMqicrbSELshAAPgdCDBysvvhW/1nLRyLw68AHwH8NfBd46X4ZXLevGoMfqyFz92pmr4CbwNN/4j0va8jyfDiQdZl3gqnLL0UfNmKGVFIUWwZWKehJN5Jf5hSoVSq8vUGiPKgAACAASURBVLU37ltK0uUpQsfkXkO0j0eBhykaeVKBRiuFnFRiGqI6CfDOFPJIoFlp3WcAhxbIKQsXcHXD741DjL1RqL9Rm8pQ3Z0cIiVAMxeoVYWaNze2yzJUZj50BtIxqPp8gI69D7myU0snzUMyPQJV9mnJFd2MZZGgpgx2ZD+FpBGqohorMRRFQfcsdeFace787mccE/lLbx1ykjK0zmKaMqbhR6hlGVJpxz3QisxZrZ+r7WeP2YTI5IlIYpXWvHxyzqPPHnP97k1u3r/Bi+1zeihc+JY6V+JmQ+oXrFhY+44D27Gi0U47cdH0tDrakX3DKl5lE5tYmQh9Z1TTNNhBjVbNBuA3wmBtMEVDldeHl6JRoVXmyzKYfT4B8ptYxW3kMHobNqZGmsSOTCmTktZGsdav9f4C/qRLCSEq2g6F3tgUxEC7nv5dmfcSw6GVWKuWHjh7+TfemQcmBUrkVtT+a9nyP/Uh4O4N+KaZXQP+AvALP8v/91Pe83UN2ZVbTteTOGK60aZMa4XqnRw1GruLFTiYMlemRGDs6NUp2yL5Z+9MpokhpTxOdQk0dkuhmuG7pjBNl1Y7hMBqCkzBSXNkzsa2NcpuB9EIIUsGXI31tBoo+iLRzT4/3sUUxKiDaD8uabS3Syuotc52aePA6PQiNdjSuw6oUqkDKAIn9k4KgzYaTcrOaF8G2K8kXQdBGBJWH6uBmY/4dk0YpUKKM2UpI4W5KydQb4Y71ChKNbdAssTbD1/y+x6e8Nu3Dvj27RvD+75jSStm5IiLOZPDpOmnvQZfO7DdbOk9KMSlNRWxdFiFifPdCT/8wee8/+HXuXr3Ck9OP2V78YJTP+fr/8o/w6OXD4neRIfhWF/IAajib3txiFJwJiLBJWjyrng2eS4kTGremeYIJkl1soR7oLQywD7t+RY0BVqUcKr1Tlc0DM07YayspoaZ8ckJUJ4s0q0xTWutHsMVe6lWHT9WGoCJysapXoCOdcdK1YUefGRCKrYu5uEsTHogtNKlmRnXglyxEqOlnLGqiSfZXuX4k1//r9gBd39pZn8F+OeAa2aWxjTw41Vj+xqyT8wsAVeBZz/tvXsIl6NUisacEh5lwd2NQI7eYQ6wSsYcI3OKWEysqqqdd81YWpO81+ShX2VlFJa2MGY5gkV8aRQ3onfSocb4w1mNQD0ap9vCdnp9gkYLpHUixzBivyeKa8TVaMulN8HCPiNJ9dsLlebObrfDU8RcLEA2iL2z2RW6K3XXBuW0r5HNOZLNRlaNU/ciljaoPleasQ1BSu870XPt8juj1DLSdIMsyr3jpihsATBpeBAghhHI2ozzdeD6Ft76R0/45Hjmu1+7Rz3IzDVQgypBc4gkuqanOUGAGBK1LkLgLdCXLtCxJ5ZdJ7lx89oVfufvf5tkx7z/C7/E4eEVXrx4xunL52zDlve/8REvX52xkFjHWfFqIdBsZtcKOTc8dYlhotE8Uklsm0HlMuDD4942Lol0pSngtXXJjrsyCHKCYo0U9HNjgxCcRsXjSDuOmY5jWSUrjYLlROqB4FIYFho5JUJSpHuzAiN4xLr+EkXaMRKlFuFaNkzD1pWLOQpMirdhgktsd9rvWQbtbTpEUlCYbh8eGfNGKdIHiL+UHPuLXj8LO3B7TACY2Rr4o8A/BP4K8MfHT/tT/OM1ZH9q/PiPA3/5p+EBl5rskeoy5Yk5BlZZT/IcE5E4nn6BFDOreWK9mlmlxGoaZaO9DXGM/O8xRFZpYpUiR/OKK+u1UPnRdGQGq9WK1WrFwXrN4eGK9WricD1zeDhxsJpIKTDnSUGP3pkTHB5OrFeB1RRle/ZOD0Y3WW/djBRUhhrDvpNXmQFt6ZKlNt3Ie4NIbboYa2kjvnxcOIOynEZibQiRMijU1hUzqAaaSgzGKsVxiBjeA7UoPLWWgfwX7cnd5US0Pe0a06WfYomRGiDRefvZwuGF8+LBDV4eJAiNKSlq7DBEorlMSWHo11HrTW8SZfWhYAtdq00gEcLE0dF1VqtDjo6vcP3qVV49f8bpy1csux33336Xr3z1I05OzhjOaCR7STQPVALb0ghpfD7J2FXx5O4BJSxpBTTbC7gYysChufHAsjSpBtlz85pcYgyX752i/lxheFHA2S2LWAMcvApvcCkUcxyZkSY6l+CkKY3EIf28PfffWxs/fn1g6yZ+7UvAxbws0lWP793ZLDvqEL7tdQUWw7iudVuXWgAnpET7YtXwzzQJ3Af+/MAFAvA/uPv/Yma/Dfyamf2nwN9FfYWMv/93ZvYd4DnwJ3/qrxCGLNMgpqi8uYSkutZoiyTB3gJxNWEhMcWZedgGVtOK9dw53S50g2rKGIwhMcfIwaTcvI0JBKreaet53FzG4cGaw8k4mLpOeXNqjMQYKCWx26l8IhmspsRq0g6Zm2FxYulbLnZ7QEnahOTKADXTTu5d4yAd2sKoYhcl1LrR6r6gQiOzsBEgqnUnoqATQZGuiCt3ehyHZ4xYd7IF2ui+W2ql+5BUdx0EuGLPYzBVuIXhBzAb9Kszhwm3ynvPC1/5Gw95cX3mO+9d53QOrGohUPHg5IJyEahMOdO8DINTktqyVWxx3cVtJCD1iYPDI85OLrj75pu88eA9nnzyhOcPn3Gye8W9D+/xwTe+xufPnlFKxaux7WUkHSlUJoZAsgx+MW7yicKKnU9ctDRSooYdHHn/3fTUr3U/v9vwgOzdl5nenBjHAmfI8DSyDqVBqfSQxFzt0XtT+88+m7a0grk8LrVUmA/YLFuwpCo31wFkXZiFmRHK0J5UyZJjkIBNSkMdEo1GK85SxezENCLRgkRhl2amLvOZjdW0ojXiNUb1T3EIuPvfB/6Zn/Dvvwf8yk/491vg3/5p7/vjLwMsdnIOo3hBq273SpiU9BpbZkKpPDka82SXnoHc2mVY5enFDrwT1pF5mjlaJ9ZTIllgzo00Ndr5buy1kfUUmYIzB9WLe6zQO63VS/CllsKcV8SgnvhV0H4egmLPJtOK6q0RPZKTfm85qEYqpQhtGY6wUZjS1XFpo4rMHZbSBtDHKMaIZIsauc3BIqU5vZVxqEAPojdb1xPEmujK3tWYUqooql5dmQPoxzFLcBWjnjKOq4W4bVmFRG+Fe996yLVt5Tu/8i7PDrOSeN0p4wBTm7O6IRTMIq9HcJWgyC7vNDetJxXwwMHqCtuTc+7fe4PnTx7z4slzthc77r15h1t371K987vf+V3CsYpMPEwstY0Ogkj0iRQqtUVy7NQWOC2dnYFbRi40hXx4V3lNiPucQf0eQlQIK/Z6L7ehSaE3NVkPS3aOkbLIsqvNXWnTevo6XHoQNFE5ohxTSpRSSHHS9zr0LL112gDr9kKzZkaPzr6Jqg9QcNxTINUI+4ZkXNdlHoeG8LDx/47m695F8S4sZPIX3n9fCsWgGaxzGgIbQ+eehD3NZQpKWTTilCM52ijrlDoqlNFDiLGaZnJOpJRkXkmBecoCjVKn2o6DkkXLuAQW3mSUASBEWpN3flk0mtfq5CwTRgiBFCRRThKBE+PeDZcuhUUpGtOUlYRc9NRQou+oIx8zYN2LZ5D3ve3zqnrA0gBJLZCCPqjUAjnKelx8hyEtwJRniZNMK4p3aBcLxjhkBhUIps8lMKrZO33Ep28WVW6fLAsPtpXrj855uO58dpwJTd9Lt3F49E6LyGwz7M/KOXwd/tK7q4mpD/WdOfM0Q3fee/cdPn/4kJcvTvj8s89568G7YHB0dMT3vv8dfV7je8A0RaliPrBtRgqZ0GewLUuPEPSdNq9Yy9ClO+kjrMVrB993Lg4356BbW600j5ea/JxHovD4ORAuR+xaHIKq8KIFUmesdPEyEt67xDy0Tu+asAbBxFj/MRRvLw/gsHDzYzf7XjFiogl9KGcFDIsD26dCp2gE10FGCGLVRgaFDbYn2c8nFvr//BXMWM/qxcsx4NZZukOUccWikl8jgfUcmaakSqac6d1lp50nrh0dEeNCDJE5BeaU5AtP0vDtu+VCMPXR5awpJDCMI1LgVQ/g8m9vNqLqdrvCKmplySnRe9UhMiVsKcR5AE+9QMiDlulDkqsDYdd2kvB6olkgmhyArTurOcuIMkxOhCBgxxUUkoekdb1K0vefXkgKjTHnWQBhHOh8FSU2TxN9V4a+ATSHIIVf1EVeR56hxcCu7MCMg5R5+3svubpznv7ht3g4AV1m2moToTorS/QkerI79D5q3UYAhltkqTvoRq1QesF74N6921w/usqjTz/j+eNHfPbpE95+6x26O1eOj5nmmacff05fpdGJEMSqhEylE4FC47w4c1hRy46dGdsQKC5fhVcuxVt9AH0BRXrHIEdnGIeMpCmZ2gqhBE07OVHLogdTVMjMXmnoUrKpO2KWMcd8lNqkAF3UstVGCE7oNpqnE6Vr5UsBsU7D6ZpDVJBukHmudmEUfaQVlV4JIUmVaIGxPw9XqbQKwYwpGKU7KaYRZKvY+RxdD6wveH0pDgGTvBq6samVNmq9bSQHRYPVeoIemPOKeQgxpphoVphy5iB1aoqQVAE9uVJhe4/ScZtTaxdV5UbM0yXYUjGKGysSXuQ9Dx7oRVNARP7t4KPZRfZDsQC9XvK+3SFOkaVXiivQpPd94OdCSo2lOyGpvnvKMEVnMmcbgxx1S2BZygiRqKQ8YVEa8RQML5315OxWiTLMU2aFYBMqo9wxBRmxvCzUsowndMJwphBJXQBdc6NQx0XsRBKtBw6en3Dvh8/55Naa37oy4T0MBVuC1qitU/e9AAOYCcGYUHFma/tdVoIgEBjXi3Pr2m2ePXrMk88f8fTxY9778APaFtarI2JKfPzppziT+G0CdKPtKstsJINdUf18s0Y1Z2ai9MxFhWX8OXuTa7I3GbMsRkpdtD510bO9uiS5CKeRPR0sCryNK6MVKVBVMCPspntk2S6scyZUMJQAHMzVfwj4osKU2CMhZFoxvHasv34ax+7DSi7tRPNGbY1ion+rj0YiV215q5IWpymOdKkRa26GWbwszU0eRyOVHiTA5YPui14/lR34/+c1diX09G9mLM1xS+SUyXMmJWO1TkyTMc0qgbSg0S4FxKMPns5G3l/tLmmurgmq7anIoP/mXObyu3dqLcheVjHEJU9RYqSU1crjY57btwZ15LRblkUlo0G9ciV0PHZ90dEISS62lIHQCFMUrhCNeY7kBDmpCiumQIgNs0pITpocYmdeOdPcSTPE2SBDnBIpR5SXrbG8IpFVtwghjc/BYNxYGocVgFmKs+xEw5Zm5AofPd5wrcDHH97i43EztEVlr71KNSlioytizZJ2VR+/RufHPBvitAmB27dvc/7iBafPn/GjT37A+x99wHqaAdguW46vXuPZ02cCwtwVE1aq7OAOuwU8JHpIdMvUFqmeKD3gYaJ4pCyjtq0b1OHAG+IqH4xoa4MlGLt2GMlSAMG76t6d4ahwgiuJKLmPLouZUo2l9CEyivhYyRi/lnycE5AE+JquVfafCbwW8ARTB2KXpkTl9Josi0MPkYrwhogReyd3Ua3qthTDlENkzoE5R3KAKQW1RKXIFL/keQJmOjnLUschAJhukpgDR+usmzwEsgUcJcgoKkx+ed3kzuIq3jCM4s6u7EhpNXYvVYyV1tktG4mPsjL8ZPvxyxENjNoVYJJzkjijN9wmWqss1dkuldI7lXaJJPdeaaP6vIcVMZpKTJMJvQ9OCB2LlWZCd7FE7pWp6knHSsBcTBByI87GKgWs77DQiZNxECbqRcG9k+dMDs40qRihu9N8dOm4KcAECEzCtGNgX8Ia0wRRkwu188554e3vPOLjw4lvX5loJcm+WqtKfQboRJC4a5pkjzXLtKaxNZoyGrvto8OEW9y4do3Pf/QxTz97xC9+8/dzcXYGyylnZ5V3Pvg6j58+Y1m6xB1dFXGejGYVCNR0wFnbkX3FtjbW6YDSAgszZzWzizNpMfp2MHejm9F6u0z6bVUcOy7VaA9iL3JSb6G1Tt8pXmxlQUlIpo7GTqCZejFbi+Rgr2kejO2u0U2pQ2WBPMchG0Pg6cCBAvsELBmt2DsEzYZcXtffPn9f4aI+sKHIKimxaiQego9nQECu0ilrsihFNXdN6swven05DgFMH2iUwqt1fYDZYM4QgpqAgw1JMBp55jlJloo63KoHdt3k+fY+Ah1N+f0W6UuhLW003UiW2fdeApfIqEtNinslZY3cpResOjXNlNZJ7uP/k8Q5Ephyugx0jNE0blfYJ800ZDPtXfv6FPfOyEbojeTOnAJLzlLzBYjZsDRApiR9QZgi7JqKRsMI+nCl4ejK90sQ0HvAXSk/3irNJJCy0absQftzt0rEOIiB9z95woEH/t77d9jGmbl2zlsBD/SyzwV04jQOkiatQQlqyk0jPtxQucaM/jy3b9zg/OUJz5494Z333wF3tudnJBJXb1wjTIEnj14SrqzYLkVXxWoEyJgSldtkeJqoPtJ26445GJs+sbU15aJTzgt5ayzbRvKKDfUkrgnQ+4j5igJD05Cox2CXf48WaQ3K4qQsxakMVTbMQIP79Tx6BkTt0seTvpswjB2kLKOZEXEv7FXH+ynSx2rZLieIRo5Z+1NUyax7l/jJndgFmMeUMdunRYsVCK7VxxERE1KW/gMd1l/0+pIcAkjlpqBnpcI0lXvkkPTkcSfEfbZ6HvTKEFO4iX+vbWS8h9EJN1x8DI+gO6EPe2fSDVzbgpNlG9W9IR0BY/ccF00PctcBl8Ygpc76eP/9A0E3hR6b+sJLGzYiV9RXsArDQELfrzQRfFCESOqrzWOk0QzwDiREicFG3h3D6KMLRWO/v/5sMKaY2ZYFS2MFGgInjceRPp7coVZuPztlFwIv1xO70qSwqw33oBvGAG9cZjdkoHV9N03tOQwUPKCMx6N5zbXDY37wg+/y1lfe4+hgzaOPP6HutmyL89EvfpMfPHwKQaEfffDd1gyvCuHMIbIsolK3IVGbsJrWIwsTuz7hm07fOH0JtK2cg70u0Ipkv00A5qVDdbAEISjfUiltI6OihSG2aszzrEKZPS1bgyLKx/fiA4UnOL3qKeLoqZ7MpULdS3vHr9td6yHBFF+Hxv3kUQdfNLppctR1UQWNh0AIoyPBBApGlGMRmpgDYlAPwxDX5Uk1aF/0+lIcAuoS1FjNaIHJqySDUGykKVEdiKJ+PEB3qQPVFttorWDBiTRCh1gD83pS0ywqc7Qkv3eIYyfuTguVs8050Q6YRldf65VtGeBf68whQml4LrSeqK6AkOCN1Lvsmh5G2ElnTsq269XxKIPQ0ov8Bb0zTUK6Z4sqEmmdVh1aozXVWPcehDa7fBO9QIrK+ZMysZCnNp4+2v1bV9yUmomHW5GupJ8+gK8cqK0ojx4odFbNWILx/tPOtXPnH7x3h0/nhDfDN3CRErlLERl6YY6i6jqKDfcpEwxqh+CjLWnpWIPkiRs37/Dq7JQb126xssSn3/sR569e0OrCg/e+wp0H9/iN3/ke7hOxrinDG9CM0cGHWpcC9AIejcUSIU3sfAaP2MZhE4g7sKXjJVJ9JAqZmBfcBlUvTIDuhJzHteSjzFRJTW7Gss9DKI2ZUUc2nK21NiyvpBcYbs5AJFmkdqP0iGXhAbE5nvZ9BVnKV2uXQi4PQYY3d3ZDdi7VYNWEXOXkVMmpasn20vJenThlQhssFzKDVRrzYL9C9X1C3k98fSkOgQ4svWM5qw03D7Asil7rvcpM1yB0Gy0/mcuwnFaJNKJXpoColLii9ybJp0lKrPcZacNe6d5IMRNGqm/1GS+KySZ0Yh7GH0QLhhgovV7WQNfu7KrahfoQ6sSUMWRgioGRGCOAyUfM0178sVkWVmGiF+3Novz2+X/GbtdY5pFGGw3aQlk6EJlTpjWjBUQJWcbHATHFxK5q7XGM2lVTpubkyjRNQzrrxN44T5l13fDB9z7h1UHiO/dmdjGw6c5CxTbANAt0tZG9N+i7EKS4W1A2w94h6c2HOcvY7jaUWrh74yYPv/8Dzk5PKMvCmw/u8+aDt/jWb/9Daq8C0kZ9WC8qTfHFx/AjAK/tmlrBg/h0y4m+c1iMsDUo4IvRd5WFhRD6OJgc8yhAea/eDPvuxr0sGSoJJ9JK13doRl86W3Oig7UwNCVJ7URBrEWwqOwH91GWC740PKuJ2VsC4mg+EpYlsVUY8L1i84IN8HLoRfZaAZxLXUzrQxzkEoaFPhqtCBAK9K5ym7rTDOxhpE/85NeX4hAAY9dh9oajGG9csUq9NSyFUUc2stdqIaY0nHKKkiY4IUuC6Qa1LbQW2BUVbNI7ShAQ3UavBEOJw5PGy91INbIYVCSBXIVtKRCMPCcsi8tVHx1gQfRSlTAkIa56SpFgnaUp4gsapY+ik9aGGCXQ972HXYUT0zwTR39BypFSDcnUX9eI1SphkdnoT7RAHe7JXtH7d4Wy+vBAWdTemUfphsWosIpUSSVwZbNwe7flh7eO+fxgGq1JTk+BLKhhL18Z3w8CIcea1bvWIxthLDFO4M68WlN7443793ny6afsdht2my1vvnGfg+MrxNWKH/7WP8TyFfZx76Ls9F7eNdnQlc7TayWkoHG5d1ic0IAFrBpWRcd1d0mBfQGC1pXS9X2ZSkO9j56LwRBUTFhGd+EeHaE5wYe4JyqTYn+DxkmgsmVinui1Ma9nbh0eEUPk/PyM7enpWA/1B3MUW156Hw5f3Z4xRsq4PsO46fvQArRRue7dBGR6GOP9a3VhJkjpaiPTsnaSJcyNYgn/MXryn3x9KQ6B3nV6tqWTJtWPTSGOJ3qUys4MqBiRFCZ1C4xE2J4j2+2WTd2y0NmXQXYY/fMygPTSlM2ejMOjiYvtIqPRECgVGrUWsmV58Ue0+HSQhFmEPjwOe9eWppJdkVEmjic+WU8Zyyif0Bq1K1swdAGFZto5+5CXhmak7lirzDnKBGW6wWptxEkGpIBhWdmDxeV+y9GULVdVVtrGE2nXCxfLwlKVI7Cy/WGg31ftTmlO8sK7Jwt51/jeg+uUNLEqRo0FPCqnwJzgo32XPp5EfQiP4qAMncWdhH59Gly9csyN46s8+fwhr5495dXzp7xx7z5xTkzrNaU5tavFSWGu6bJiu5emQ8B1MNfSmWOm7fql5ZcIfdeJLWA7x8ahYNbpvUi4NFShMUqC7s7rAhsLCvEIJjp4s9M6l41WFZTaa2e9SuCyQ29LYZ5WtIMDbr/xgOvXjlmvV/TBuKec8G688eBN/upf/otcnLwg7j87G/X10cYDZIjMqqaVFBO9Ktq94lC13zcbJqjxeYCUq4pF0xSZUqK1oAOeyK46x0fHPHj3Iw4Prnzh/felOAQknG+EjMCn7nirxDi6A4cEUqCKj0ppo4yI57oPIQ2mw4FEHKq+1gfohg11m1Jzc47kJu609oUU9eWacXlBuu2FTBpJSdJt1y5QrXSjtKqVvAlVDkFKvZiDAidNGXPZpM6DvZDGSXupJzKB5Cx79EInB51BKaBFuAuVFzDX8aRdspv87dpnhWxWr7gF4ipCVyy6uhaGM43RJhQjwSdunT7n/g+f8fxgzeOjNYdhpq46uUOODZIoTxtx7nnKow8hXAKovg/D1KggWWsI3Ll5h0cf/5Cnn37O088/48MPPryMapuPDvjt3/k2pbch9++YVbyESzqtj32sLjIgETWW77sYm3coAhJDtQGGFQIFbJ8m3McoLfHR8HyLIZFcEjBq00G76w4t4tFoRfjJ8eo6V49vcOfuA27ductmu2N79oq27GjAUop0JL3T+sL5xZYbt67xxltv8DvfeoZ1F3wTRoRcV7pwJAqnCAqd2duN5e50osso1K2PRG1lPvTi9GbEJCViqwa25vj6Ta5fv8W1G7dxIrtSKaXw8tX2C2+/L8chgMYii1l6b6uEMA2qTvJbah/MQCJFhTPi6J7qjVYV8RQShN5YamOdD/TerjEwyO8qrwCdlHXTTDmDQatbUp4IrbMM/nWe4lhRGlhkKY0Y8iikkGe8NikD51UimdNoVO+sVll9AmNVs1bZtkqeJnxphNjVlDRqw1M0ZqouvtYuqR9iIGTpGDqqNA8x4V3hlmZ77wQS7XSFWdiukMw5WGUp98ZhGqMiyLFOD3DrpPHO6ZbfvLvmLM6YyRKbUkSu+QZB7LYxQi+zaDvz150LIDVhCpO6EqaJZ8+e8urpM549esyDt9/Ebcc0rVi6QU88efqCng8HAyIrtfdOmpNu1GFvjjB6JQO00SK8B2ea4tezOykoRuy1bkMVbd4NkySQ2tUdSUM2X9Og3kbu35QTZ9uF21du8u5bD/jqVz+ibHecnZzz9PFTnjx5QYyR27eOuHHtKtH2RLCCRywEblybaW3hzbfe5lu/+Vt4baxW46HWXW3PBOVDWBxhL1pLzZRU1FpFDVZFalBXGEntup63zUmWePPB29y9c5dr129wsnVaLWx3o6zXjMPDK8zz/IX33pfkEBAlEiflrOUY2O0WQlJKS2/KsU9or1186KWdAULJiRXM1fzSG7NN5DQKHkcfIQHtgHmCstMagFNdbS0WgigqN0pvTFkKtDzZ4JWdnJJyAProfQvONKfhTWkDoyhUi+xcVGJr+0pMJyVpA3LSqpHS0PNjEDppSuTapQQLwgnk19+78ozuspkaStINEVorKjcxx83YlUIICmdRxoGwCllMlc3gZhzUys0XJ9A7Z+8+wPJEip0UR19hBmKg75R1b90HXmO4L3u5Cq0KrzCM7W5hlQPvvfOAT7//PX70yUMevP02N29epW4uePrkGQ8++Cp/6+/8xgB4FZ4RY7ikgL0bXsWspJAIHqhLhTDESh3omuqsyf1nVomZH4uGB3MlPDLwN+9OTHKA7unXMAI9atUNigfe/8pHXL16lR99//v8zrf+Ea0urOeZ6Lo2f983vs6Vo3ukMMpsLA5UX8EeJr4YrgAAIABJREFUrXXOzs65c+c+rTrRErttkbw32Sgg0TVRWIQJDW+LPgPpSmqr5DDT3NmUhTivuH/rDvfeeINb9x+wLAsXFxu8w+kFap+e16QUhZsN5eZms/nCu+9LcQgo9qGwVCdOiVaQ9RO/5MrdhQgwEnl2rTJHCXSSN8wrOTjNmr5kc6naxvvTJKdtQGn7/Pahu7KOIwVdCPGyZHSfVOyuv0DusRy0A1vo5CTKaOkCmCxKRbavpXRTi2ytlWBOnkYRKs4ck2TKoeM9DmmBQE69jQ6ZPRDlQco7TY867Ko3kguxLqUxzyu2ZYclgxZYzcpe3D9hzJXWVFsjTpm0WXjj+XM2U+J7logD84t5UHNEQujEnkZppkRXNiViEZPhjH5FD1JxBufN+w94+egJn/7oIe9+8D43b17j1ePHbF69YlofYNMs6y+GhwQjfixEiXdUr55J80SrHbyPQFgI8mTrJi76fi262qvZkKwrJbijyW9cBWBDM2SvbeCTNBZ08fQhBurSefTwMY8/fUIMxpRm0ixcSJJ859njz+Gjd/ZbizIMe6cthdWB+gx7qYQQuX7jFs8fPZY4KWmisWCiMG0Iu5oKYHx0Zex1/zEfcPP6TfJqxVfe/4DSxEi9ePmK73z3h8SUuXnjNofHh0N/UHFXitVyekEd7VTz/GUXC5mxPpiYIwTb13jtI8fHehgVvY0HCiZOP+g/Ggz7bKcm7VMpKB1G371O3tqdaoHaFimratVT0dv4aeFSZCMhhhDY3uTbD9FkQQ77Kq+q32uAlPXl1VEiUs3lNEtShcWona/5PrACSl+IIbP0pgs1yvwUxoWqenM19oJ22/5jIhe9jw0dvMQj27Loye2dlDO1KmdQzToaKZvikGm1s+6NK4vzbJXoBwe0Xok5CTmIr9H4PGlvDjg2j55F90GdmyagInWUdPfOqxcvOTo44M6d2zx78oiy3bFbFh588CEff/qQ9dGa840O8Hl1KMrLOsGDglXpwkLMScGGSElfTrIggC1lCGMyC5XD9Qptco3QBYKGmFiWZVhvw2B1jNU8/1idXMML1EWU4Xa35drx1RFX3+m+E3cQAr2pdxA0aSSLmgZiIueJXpX+s90snLw65WKz4/qdO9y7c4er16+xPlyR54m/+hf/Evu0I2JgtzQO5hUE49bN2zx45x2+/e1vy/tROr/+G7/Jq/MLjq5c5dade7z3wVcUnbdUaiuUUthttfsfHKxZr9c486iRvyTU/2+vL8UhEALMSSPyXuHn1i/H1+5OWYpuZF/ovZLnmeaLgKAghWBshu/sUr1Zex+JKmqIKcBSh96/7VN2pcGOlwYT9dhVr5cgjJRjA6WPUYGewclmA6lVQIiabaQUy71xsJ6gKz5a4gIlHFlA0VOo7bcHBYhSivb/gIovbZRPuPQOFpJalkNUcShDwYZMMXvw05t2/31HYgjQqlSGpQ43y/iQPjytZE98/u59lqkRYgJEgxIgTcNmGw26AEuQqtVWmfNFUdtqEhLOcO/4JhcnL9lcnPKH/tAv873v/S6bkxPOTl7y3i98xHtf+5Bv/6VPCAEOj1a4pZGbHwgx6zMb57divgy6ItPVLF1JEeEcBqADMzRnXke8iXXZli15UMhKPtIEti9rzUHMkI0Y7z5q3pal0nuRTqQVSYWDgkF7beR5jbvTihMPMuaRzfkF8yqw7DrPnj3n6YtnHB4fYWnml375D5JT4sqVY+Z1HmwH3H/wNo8fPeHGrZscX7vF9Vu32Wx2XFxsOD15ye989/usr1zj6vFVrt64xmp1oAO+OrtSOD89G9OrPqNpmokHB5cp1L0vg7rdV5r/5NeX4xAwMC8EVLEd9gAQ4qprVfpt6Xr6hQS71khTJHajLW24+4yYM23A+s2d2opixd3YtYUyQkJql0S1eREtEzTS7VO+oyXhBV08bOraHWXNVwClhb0LUVXXzSVZTiYr9LIUphEDZWHSATFiwVRUip7+dRSvuo0gClFGpTWJPlyW1ubCHGp3CFHsRxWLsq9VA0mw29gF08ilZ2AawaQpL1aJS+HKdz/mJAc+v3GFPinOPeZZYKgFHQSuMTMGZ85paDcSS6kcjAmot6aDosHqYM1nP3rIV3/hq3z62SecvXzOyfPn3H/wJm+8/TaPHj9iPRk1GD3GIb6JWJAYpnsmpqSU52C0Lu8CAF5HQtCQ4TZNhEp5BkLBooJP5jRTlkVimhygVmoZmf6XCbx92MFRDEQMgCao7q69uhWFg0gsoczGVvn+d3/A4XrF6ekrnj55wupgzfrwkLt37/PeVz4kT5krx4dcuXKF5gqNrW0hpYnaG1/9+te5efcZyyIl6POXr0hT5trNG1y5eoX1ek3Oug7Pzy948erlkDlHpnkiTytNdgNE3m53Yz1RoMo8rwgxiun2L5YL/cyHwMgY/DvAQ3f/Y2b2HvBrqFPg14F/z90XM5uB/xb4gyhl+E+4+w9+2vunkRGgoIfAuNswhkTYZbgIRDDtz0sf9NgIjihVN2Iz3cnROhXpENrAE6Sp2Of5OUaU3JV+eePopzk+egvcBx9LI1vUurYXZbhoNzexAH1UTzcg50B1gZZ726qZrMK4Gm/3phV58G001QrZZpzo7kMq3aE0MQC4yWHWwb2x76EHRvwUQsGHYzCggI3Uu7L3Y+Cgw9XWOFlPnCUBh80rvWxZzxOGy9EZx74+vpcUdOgQDWsy4rQQSYPF2G4Lb73zDtvdjrOTl5yevOLo6Igrx8fMBwfsTk84PjxkuxR6HsrKwD6HhTIUmylrvTDUlBRjuFwTQd4FHaZV6HwKlFaZkhiE3vc9DuVS3rteramt6TOLgDWCxgqBnF4UFMOg+5rWJuudXSmUunB2eqIY9VK4f/8+t27d4mv336D0ysXFBc9fvuDg6KoSGKYstgKjo8TrWhemPEGeiHnmynoi5kl/lqGRSGuxNJuLCw6Pjrhx4zrrXWG73Qp/6QIfSynjYFAIzTRNmBlLkXJwqUWH9uUj4uc4BIB/H6UMH49//nP8ntWQ6SauJstndxf4NAycMm/tI8D6CFuUAi8PHfsSGBbkMHb5Pf2inbV2p0eJUjoKY9y/rw1+P5iw7mnK40ko2WbgtVGo9zrUbCqiaLSxSvQB/gmIS1MS/+uvNejg6uRzPb1Ulz5UZDHIqNN144UAtM4OmEYhRkNTRRsHZK3yNbSu1Fw5Ww2LuigY0t3aFCzSu1xmCgfZcqNWri+Nj99cs1nLDZdioLYdrXdySCozN6nccD15D4+OmeYV12/c5HC9ZlqvWa2OyHlFLZ1/8Hd/g7o559Xz53z+2UNu3bjB0dEVDq9d5c0Hb/Hh0TH/7B/+lwjWefXqOZ999pAf/ugHnJ2fEiMs44npNjT9kjgMtd9eLGOEpAAOKUeNZbQtl9ZVMEsfGJtCW9PQncQx0aX8OluwuyrDwigLuXJwhcjM0yfP2G625By4e+8e9+7fJeTI1eOrLJsttVQacLFbKK3hltiWLfN6ptPZlYWQYLIEY2rpzXn84rH6J9JM9c48jSko7EHpytAEsdnuYFfYLjuWrViflDOY3IFp9EfU1ii7RQ8x6xLbubNsd2y3Pyc7YGYPgH8d+M+AP2N65PwRfo9qyHRhj2AMC+JHbYzRyEKZ9DyQzz5kSikwJd2ivVNrVwADg78OytG/vNFMLkNN3HX8vdNdNFwInRwkvliWSogCpRywPKrGo/TqOhT6JVDU2rCrYvio/arusNThHJf/IcVEaftKskxvVVbTIbutrSpJpmvNSHFUn4vIVoOt94GWSy++NLtMyQ1JU0trhYHs0Vy+i2AqXwldfY95t+PeyY64NJ7evsn5nnLtgSmvid3Icc3B4QE3r1/n7r03sZgIqNMgWCCnRKkXbHYLZycL9MJ2u8O68+zJE148+Zz1aubw6IjV+kB+/AZn5+ca1/PEnA/58MOv8Y3f/0t0b/ztv/U3+N3vf5spjyadAIQoULctAwgdkqehLehCbi8pylrruPmHXXjKWJX22UJStV032g5CzKScuX79Bg/eepvjo6vM00xZKst2w6uXr4YMOrGUhTxpPD87P2NKM+uDic3ZhRqbMI6vXeXs7BzcmTDWnoiLc7G94OGnn/Lw00+5c+8ed+/dZ3V0rOnU9ZCCTorSoJTa2e22Y+eXPmbKE/lQ+QSlFB1oaWRilsLz5895/vQxJyev2Jyd03sRKJ2lv/m5DgHgvwD+Q2CvPbzJ72EN2ergCEeBD74vfjSNia0sChOJidorOWWdhCPBdR9k2fSekgt3VWzvE3Xd9oWQRqNJajxqpWrjcoxWa+8i73XT5p/zSBMKxr66XJ3z/dKC6nsNvWxcAumsS/Zp++jryGZZFEHmCkZRk00chhHt+WWRAi+78IgpRhh22t4lyW2uA8zGAQaMkV00mtnoNMDlTsTodQCtHax3ptZInz7F58zZtMZq4PD4KvduXOPw6hXu3r7Her2m1cb5xQW7jVPahvPzC65cuab7U3ydDq7WMHeW3YaTly84f/mS01eveP8rX7kE1W7dvMX2YoPFwGqaaaFBjIQGy65DNP75f/Ff5c69u3zrW/+A8+2G0PV9XSoI9xLz4a9wHyAlEgXlGEefA0puskRwgz7CQj2wXq2ZVjO3b97jzp1brFYTwSK7pXJxcs6SFk5PXnFwdMC0ypxfLAQPrFYrTk9PWB2syHkaVK2Yk2XZsd1suTg9JfTO3/v1vwutszk959qNGxwcHfPWu+/y9dvvEicdaruNmLBpmvDmI7eyDIDamab1sJQ7rTlLKbS2jDTnyunpOY8fP+bpk6cjlFV0oJkNxeo0HgZaHf+pDwEz+2PAY3f/dTP71Z/283/W14/XkF29ftt7ldCBrr541UkFBVeODLcwOGIbRZChg3WntEYdtdulqKfNLYyxXxJhcOhiA1pXLrubsQ/eak0XYfyx+KfA2D+b08Pgk1HBRbBMK4sOlKbTVvqC0dPrw104ykbZYw5BAabdG+uc2O3EQrTqupEs0GuhBcWNDY3REMf4YAHk0iveiF2R5mVZmOdhtXZRVzhY1eHRm9qCzRU19fb1O9xePuUsJX71j/1bvGqNl9tCplJbZVka280JvXdKacS0r/GG7e5cv6faLhV9khU3Xjx9zMnLFzx79oSvfvUj6lKIYeLFi5f8gVt32Wy2ClCtjbLbYilTcmZar1hNK7at8v57v5+vf+0P8Fvf+k3+xt/+m0p86w5EBW2MRh8Vs0ZRqMNW65axvqI3HbDr9SG3bt/i3t03OTo64mB9gDdYlh1Pn37G9nzD6YvnYGPta43TspMBqQAh08Z1d3F2phjxiy1nyylTCJyenBLM+NEPv89ms2GKmRvXb/JLv/wr3HnjAaSZpcDF2Y4XW4edHmbTlFjNs9bQOJGSMc9iI5ZloZRCqY0YFZ1+evKCp0+e8OLFUzbnZ4DTitiqeZ41UHQnTq9Ts3t34TZITPZFr59lEvgXgH/DzP41YIUwgf+S38sassFYhXGqy54ZVBkdEqUVio/qpVGy2ZpUawRYqvIIa28srVKbDo3elatfGVNCV2sPNso4R2nnFMXE9+HVbr0K5EpjGQ160liEOFB9eRDsUtvuvV0+fUMwGIfSa0XdIoFIVXpwAHbLIsMRWmNaD5QK+EQftdNxUH/ehGrX2hRS4pG+aL/1LlS7bBohy55qaeJgfciDN+9ydHjM0fFVDvuaTTDaxQXvne24+At/jRd332C7XbCUmBrscOiR3VbdBm2vpSiNpao74eL0nJiyAMEmeWsicH76nBdPHvPZJz/i69/4Bq3smNaRzx9/xkdf+0UeP3umzzgEpnkm50zMiWiRo9Koq8bh0QF1Vzgvja999ZvcvfeAv/7X/xqPnj6lImp3ipnoWWGnrnUspIlpWnP79l1uX7vNvXtvcHRwSIyJi/MNT18+5sXjMz4+/Zj1PDNPgeR95D5mWcxbwPPElcOrPHvxgu2mcrE9xYCz05csuy1lV/nsk0948ew5OUe+9ovf4IOPPuKXf+VX2JVCc+N81+l15rNnlWhGdSOt1qTjSD6YyDEzp5nkkbIrbC82eDYuznbk2Hjx4gWvTl7y/MUzNptzQlCbUM7ChixNg+nRw2c3VKV6gGqlUO28ateVyvVzxIu5+58F/iy6kX4V+A/c/d81s/8R1Yz9Gj+5huz/5GesIRtT86VCDxcS3U25+HgYXXL9sm4suNGQl72RYZSFdBcOoIe2qDE9vTVCe++UXcVMHQEh6LAIQd7smOKIM9fTO+WE+17Hrxv+Hw/R3Csble6yF/L4APy05tSxOmjS2O+1ipOUIKm6SkitK1nWhmfex2Qj27AuVGuKsqYnenfm1YorR8fcuHmTm9evc3jlGnm1ksipKRSj7Bpnuw2baIS2cPaDH3AcAtsHd3lZF+puw0zWTT0oyyllWm+Uqmahui89cWdZdkPrr4MhmXPy8jmvnj3j1u3bBDMudjvOznRgHF+/xovTE8yjbNmbhYMrB8Rd4GBeCcDcVTa+gQNhMxYLV6/e5F/+1T/K//6//s+cbjYEFGEePLJiYn10laOjQ65dvc6bb7zDPK+xDi9fveLpo+cSVMUA3sghM+cVeXhI8jwDhdoaq2nFyaszOsbZZkNrTt1csHl1ysOHD3n22WNardx/802++Uvf5O79exzdusY0r1it12x3G07OTrnYVJyZYCtynEjrNat1YH20YjqaSAcJ60bdNJZlIxQ/d56/POP87IyLk+fslg3bZUspO9yHtmMoWn2M9ymNlqndcqlV2eMLm81Gteh5urRnhy92Ev9cOoH/iN+rGjJgH7PlDsuukCaJVhhhG8vQArRBh1QEptngxMtQ74GmCT1xjL4oez2mIdd1NCrVrpooi/q5kz4Kfcid3js5qxlZvSRyI/pIoNkrFeXzB3fRNmMJE77QGu6Sjjr79UIFJOAUd3oYJZJAGDhFcN38S+l4FH2Zp8zVq3e4ces287Tm6pVjjo+Oh5ips4+0KqWw2zV2W92k3m1QYrCUrtSetuPK82fEUrj6zW/ww/+LuTcJsiw77/t+Z7rDey/Hqqyq7q7qbvSIxtggCQKkSIIUaVGWHeGNghHWysPS3ktrr7T10g45HPbCpgeRlhxhyaRoUcEJFECQIAASQAONHmvO4eUb7r1n9OI7L6tJoUVKlB19IzIqO+tVZud7755zvu/7/39/L843lZPUnTkRU2RbJEpLhEoy/owxXpF5SynoCsmIMXD2+BHjuOGVj3+cB++/x7jdstluefVTn8E0HRfvP8a6VqYMZeJys6W1lv3FHn470e9UbgWMc7Sl4ND03QF/82/9bX79138D1/QcHl7n1o2nmPULFJrLiyV+nDh/+EgyGeKEcRbXO4ZxYDHfw2aDMw1t03J5cQ4khmmDtoWSA5fLJRcXS84ennL/3gMePX6EMpYbN2/yyU99is//9E8hh0jFNE7cXS8Jjx7y+PFj9g8OufPsHXzwzOaHNM0Bs/4E0zSYGaQ2QVuIbWCyE9N6ZHV5yeWDc9bLNePlBAGyz5RBmJK6RuntUpwk2EZKwWmaakM0S9BO7QPFGCR/s+upU3KoG5RM+H/49W+aSvybwG/Wz9/k31EMGVQQRikUYwRokaU+Q+uaBCT6geQDzjUiIZaDNj4m0fyzaxaVahwRWENMkZBC7eTLTSOMNysyUSXc/ZgzrqkwUGeumm45ZzFzlFRPBdWCXBeeUvtWMmWQ42nOSOiF0VWTIB58DRCTsPB9lshpqyWHDklKuvnMUxwfXefo6JiDwyOm0VdYaislhxJE9nYVpIaMUQAatSEqzojE5D2Nc3V0KZFYOUPwA+9+9WvcLpr7FC4en2NcYoqwDp4cResgISviRisU6aXUuhnkxELKhDjQd5ZhGHj55Vc5Pz9lu15zcXbOzaef4fZzz/Hd77/NxXKLVgPOOgoK1zhi4xi3gb5raZsNR8fHhAKz2YyMwrUzSIbWLfjpn/wFhq3n4f1HvPWdt0Trbwu2EQVg0wvua94scK3DJ8/icJ/NuKHExHA+opMmrCeG7Ybz8/tcXpwCmXt33+HR/QfMujkH+4e8/iM/xlPP3aHt57jWsT6/5O77d3Ftg3GWw8Mjbt68xYsvvYy1VkZ11pKSRak5qRhCHhij53y84PH2Md55lF+STU+cIA1BGr5NEl2MVSSbsLqrI8wWiOSsKVnGn96PBB9ouxZnbRVVyeg0BA9KGs0x7nr2AjCdxr9aT+D/h0vQWyjFNHk61woaWgvoUfzwEp+NNiIKiqlKDZGIq1KuYp507SHlFAklXUkmY9wJkORUILLkJ/4A6+RUYVQNqayTgVKFGRk5VYgUU5SM4kgR5xcFibIuksojXXpROZZEVRRyZYiSbrUlB83HX32Np2/dwWhH1/RyHPSJ9dIToifGSONMDQEBVTIBaQalXAjjSKknGNhNB2DYjigljaFIEHZfSjSpULqe+5dLgttjGLcQC2Ntt1utmcZRFtEo2oiU5HdLMdXfLVFiIJeAVpk7d2Q3jDFx7+5dbt26RT+b0c1mnJ1eEGvs1jhK7FrXdpQgxF/vE/2sYLqR+f4h2raUDA/fv48PhYvlJdM2kLyMSDsnMejtrCfWeHI374mqsBnXKD9RLIRRfu/z5SOWZ5dszzbkbcFhOVj0jD7w8MFdwjRwcHzM9Rs3Oblxi73jI8YxEPMG5xts2/Dsix/j+NoxXdfjnMO1TS39CiUlNtsN3ivGccvpcs1WbRnNitAG8gwOWs/cTEx+opievNDooGqacx0/Z804jPKeTqqWpxVFnryEodSSVdX8C62fvN7O2SuoqVzpidrxQ66PyCKgqqoPFKYqnITnrnSRBl3RaN1cUXJjEWio0hptcj0SC8zCp4iuBEJVVAVH1D4BVAqOHGfrXk9KQVKJRk/bNPjopW5sRJOuk6ysyicsBWsVNou0FyN23awsoGVmnHXtM4i5BkRbH3NERUXfNaQQeeH5T/DsnedBweQjisjq8qyeVopMTAoiOgr+Si4bk7ACvfdXL7BQgbl6Q6S8KwvEf27ShNeKxWaiH7actj0PSmG7ekS+arKJZ2C763vkxDAOKDTRT5KCm1ONGUuQE11jWfQNpSSW52fcffcdnr5zh8X+Hs2i4wfff1Ncd9mQcdWpWWifusneyQmvfuITzOYLCjCMI48e3+XR44fMXUeYJtCGzTjS9wuK1iQDi8N9phzIncWHiTFu2E4jm3GDDxPnl485Wz6GBg6vH5OVRS0M1xZPcfvkY9w6fJq8XPPl3/wdrEv0fcf1Gze4dedZjk9ucf3oiK5v6fsZXdPQO1HwGV1Yb9esL8+4vLzk9PEZk58ElBs8uXQYc4Dac6iFQs3AHFqa6ZQDFdgrW6LtWaWJyc0ZXQvKEZGTKkDvetKUxbOSIjlFxmFgNmswtqOtxGEfZTpFdVluN2visGW9WpFDwDYS3OMax7jZfujd95FYBBRU1nu9mWtkNNWQo6j1Ta2Ddlcd2JGiHLVFbyG6e6NkvLirv3fNuCsRkqosuhgx2tEqKzVZlkjvtjUoZejajmamuXntmFk7Zz6bc3R4iGsajDEsxy3f+OY3eef9uyQtUwNBiyviJNj0EAOtE4iFxpCiwg/wiVc/w62bt2VKYIRWG0KsI7+MsVZKi1oqTeNWFj0tWCq/HmvNH0lRGnht07LZbATEYWR0KA1XxzitwVj68w1dLIyd4XIciTHWvoGqIhSRmsZYWYVR1BW6io5KKaJSVAi2S/V07pizB/e4ODvFGE3f9zRtQ9Navv3tbxFzYruZ0LbntU98ms989vV6ciksLy4ZhqGWcdB1c3xIXE4TnWtkwTAzNC2usVyuzpguH4GBsB5498F7jGnCa8/sYEZuod1ruXbjJilH5sd7PHf8IotmwYM3H/PNr/4Rv/b9f8oiz/jRL/w0t24dcnwy5+DwiMPjIwAaJ1g77yfef+9d7r//PtvtFlXAx7ESfWTSU4oixUQ/65k8EozSt+QuU2aFPTUwbwPHesUsrfBqRKsZAxLrnruOnMSnQVIQFUY54pQok/SXjJbNMYQtzsq0oOTM5AV2WlLElMQ0rBg3l8QQmKWOmye3McZhFv2H3n8fiUUAqmNM6+rqenJ0UdXmmaqhoyBHm1ipKanIjhWiQD6KqETIqSbElp3LSrLxEtSFRWS8lcgFRTHrO/bmN1gs5pxcO+LgcJ+DxYy9RYMlk2Nm1vXszfdYbzbkouiO9jj8iWv88j/836oIqYiBpx6Zcw2mFE+CIUyZ44NrPHfnBQ6Pjiip0LcdwU/SfU+ibvTBQ5SmHrmIjLRkYt35dx851T5Arh8p4f305GspkUtmwqNJwkPcblBGcdk6xmEghCjH+LDTLEzkXCQcthSCj6h6JNUqk4P0IpTS4BRts8D7kfVmxdnZGR9/5SWUdWzWK5567iledh/n7r0LHj/e8Lkf/SJ9v2CMRSjP3jPvD6BIOKt1jikkWgc+DvgEpQQSgc00EnLi8eacy8dnTHGknzuYKTrX4lxHbjTojG4t3d6C2WJOHAe+8tU/4PLhksZ3vHrnNb7w+k9w4A4xZsI2GWcDsRQuz8+IPrDZrDl7/JhtXVAL9XXNUSTUdRScq9IvZcF4Gd3Sd72wLMQXhS4BqzJWRXLIWJNQOZGzh50PI2dIhXEbUFjyFFEJUoqkGFBExnFknDYYLS5Lq0VdG7MkEzsD8+ND9g72a5iKvOesSjIR+ZDro7EI7CSeHzANFaWE/e4zISLOQAQDlRGDzK7jThG5bsypCnRkUc0xY0xzdUPuLq0U0cub+KUXX+Lk+ITL5ZLN5YpSCqvzJePFiu/7ibZ1/I1f+BLKQKs0+IltFv+uax0hBTpnyGEEK4EPKUfAiSdBITHkWVECvPj8S1y/9hSzfoaqjURiQFMgRsiRzRAYQyCXLCOkWsdcTQKU7NjlQM7bAAAgAElEQVQ701GsjbySM8tloO0a0YrXBlHKQm5OfpBEprML0LDc65i2G6ZhFIMOCp9FC1+yQD79FLBWU0ImRC9eCVXo+4ajo3329vc4mO3z4J37PLp3nzt3nqWQaZuWB48f0zT7/N7v/TOef/GT/MjnX+fg4Bp9Pwe0uNz2Yb1ZY5yq1t/CNm/JGi7TOVMYOTu/YHm55nK9pp3NafuGg+t77PUHeAaC8mSVxCmoAQ/r5cCwHsnjOxgSJ8++wquvfhrWmc29FW/ffYtwMZHDGq0DpaxBaTSS92eNwGV23pKUZQStax8KwBh7NY8XiXISmAvyemhlKCqhcsRPK7bqgkMt2LEULaE0jMWzxaOjQSdFow3j5RpHg58SlAGlZcEYpzUxTCQlrsdkxLTlOkNjrYzXjavcCekXBaq7Mn/EewIll+pOMwJ4iBEfxbozRVHJpar/R+s6x66zdlU99UrV+CuJXdrx+VIUdaCop8RnUFTBGLHEBu954zvfYd7Prub2jbXoUnDWkWKmtR1NIyRgCmhdkV5FtETzrmfmOlbeCwG5QFFZ+hFKYB578wXP3X6OcRB/et8aFos5w3rLOA4Mw8Q4TXVOL1DSVBLj5PFegBaxTkmUUoS6a+9KhZR3SUGF9WZ5taDGlEkxXGnsjTLoyxV9LGyHyHKzEnBIhpgCKNGxW+tI3lc5boN1llnTgtW4RqGJdHuOxazh8vyMx/fv8fxzzzNbzCg58M1v/gmffv1zfPOPv8tP/8zfRLk5zs2IUXFxesnkNzQzy61nn+aZF29Ao1ivVzw8u8e33/0WZ6cPmaYNE4niOtS8RfctsVKcV2GDPdyrtGiRWKvGYpqGh/fOmFnHdHmJM4pbN4+J45p7qwG1hbJJlE2iZ4HGoImgbD2tCX4t1O66YNkyMQuENFf/QRFjCsbkK9/IOE60SsxtWkmITY4RtGcxa5kny/rRCn0gGQWhOJJuRV4+eFgl0qVnezrQaEdRiZwnlMpAFLdknc8KS1IEZFZXHqPVWLyI1LSucu5MUY6u+6gzBq+0++mKh5+zENlTzPjaDFQ15kYh7PzdqGqHBpNZeaXMGAul9gpqiGaJUR6rJHxCowlTpOt7KUCyiIeE729wTub6wzTS9Yv682pYmt4tLGLbXMxnjCFArQ9zzhhr8DFwcHjMc888j0JzdNDJsXzasrfXoShYY7DGCC7MB3xIjEFq/BACuchiFkP1LCgtJwTKlXtRFRnZySRZNBCm+u5DNdTkmNjmzOjXmKIoMbEdNpAF0260kUTkBLZ1OCVCKeM0VOyYjxFlDa0zAmxNMG0GUs4cXTvm4vyM6D0H+3s8+/yLlPcfsdmM2LahlIgfxdjSziyBiYeP73K6fUC333F0cswrz73Kiz/+EiVPxLDh//iHv8LZco03in4xr1qMhC+BcTIcXl+Qioh9sKL81GnDduPpnaU1kMYLigOl5zJ2dBrVW8pGJjo5y2pu0PjsMTRVyyDvKaMsVb2O0sKSkBxJSbIqRXiA3k/klPFhS5s7ttstbW+hyYRpSyqTmNp8QOkISsQ+U5oYzzaYjaJPmkXXiDZFa3JpiFEETdUmi1IGpaq70gAqy+mAglMZyGis3N1KQ7a8/e79D739PhqLAIKAit6TlZbUlyrNVVp2b5Qgs1IFi4ipYvePkVNAdQzuavFdV56MACtMTf+pc3ZVFM6JI1GQ3UJ5LaUQKlnIaMXp2Tmz+Yy+6WpnfGfn1WIk0bC3WLC+XGGMpV3skXzm+OSI4+tiHjG6YQf81giGvFTzUi6ZkAJFKVbbDdPk8V52fO8DIUap7bO4xySCVZ6DogppkmzDnARnHmrzNEWBd6Ykg0WtNTkm9kJmsIqztmC7pj5vsvChFMqK+alUnFcuEVvEyBRUwkSNyoW5s2zXEw/vPeLjr73GxfKc7XbLg3v3eO0zn+Hk5k3eeu+ctpmhjCP4hLIJ3RVWYUB3mm0cSYNElr033sM9hJOF4/nbJ7xya5+//Quf4zd+47dYhgB6i0eh2zkBzdKvuTG/TkgJ1yk6ndBk/HHL+tTjSDgd0T6iXU/RLWk2k/dKAMSDevU+iTXnIhepNSWwQ4lmBQtKkgW0krFwKYqiYp3Li8V38gNutpBmb2+JYWI7XDBrRqY4YEdYbldcsOG91WPeOU882rTYVeGFG89y89pz5HZLSkGkwsaQlKqNbgeukMIokXta44xDq5pjUAqlVWQvpUoOiv2DA15+8ZP8d//tP/jQe+8jsgjUmGxjxdqby5UU0liNS5qIZM6XnQQ45J2xTCKrKo9KUd1ialdHy9GoVHP2zkFotLQffRjRVB6ATPtACZTUKIFs3394xjPPfozVdissAbgSaIzLLVorvvQzP0/bOqx1NXTUoI1imgZWm0u2qwEfCtM4oDQcHxxAzpSQKDETxonLpcAqttst28EToiC1cpJTT6xjSpkZy2kj1/rT1elHzpliRGOurSYqKFre2F7DLGtuq461SzxsjdSMSjDkoXrzS5ImHQjNSCfhJZZS0K3Be1F0lqK5XK7Y299nnEYulivOHz3g+vWbHB9dZ73aEmOm144UC01niCZTtNTas6Oe/ZuHzK/tcXCy4LDXbM7v8v6f/CFvfe0bLF58hr0YaKZ7fO7Vz/Lxz3weN9sn6oaz5cCYYHZ0yDQuOX3wFnG4wKmIO5jx5oNHSPBXtXZPG7TpmQi0riH7LCxFnwk+YKwY1sQ/AqWOqBNa8O5YdihwbXQ9mid8mLAGQpjIZaJkjR9HUptpS8u4XrFaPyQM93j7wftMjyNplpj6GUt7naQOULlh3Ey8+/Z7vHLzJcbkKSpibCarJKGkVpiYKcnCrrWkSxsjcvUYBYbikyFlw53nX2YxO2K92fL9773Jar3+0LvvI7EIKK1QVl9JclPM1eGXa1CFaOqNpJNd7WoxVKmwtPfZwbtz2vUB/ixcURfxwstRyuCs3Mjsyo0iEwTvPdaJ5LSUInLSs1Naq1EanGuwRYi1s1mPBppWZJ0GCQ0R62ZhPp+RvMebkXGKXF5esLfYwyiFDyPT5Bm2G7abLZerFcNWNOipqv98VuQUKwsxPxEh1d0q1zCWUL3loITTp6qJiXTlvy9FQj0VELUma1eDWapYq8jCh9W19yJqypiFjoRSpJBxfVMXWgGaXLt2wvnZGaePH2ONYb43I6TEerMBDNPo6WcHggFXlbq0cCQil+tzzoYHvPWtBzRl5NXnb/GzX/wEb3zzq7z7p1/nqRvP8Ne/+DpPv/Ai/+TX/zFjUkyqw86OKG7OJirCtOLWjT2uHVh0iXQLx3slQBR0nFNIHFnyJDpJ86k1+851mSsPQGs5PisUEU1KRTBnpkUjITHyPtTk4skhE+voehxHwLJZnbNcLhnuD7h2y1F6wCEXmDGRk7hQVeVbBDIaQ2Ma0pgJeSITQMkCjxINgK7QWeueULf0zh2rBLg6+YlbN1/k5skz9P0+TjW8994jvvy7v8/mo74IQMG56huIpfrDudIIWKtplNB9TWurAUiemJikqVOH/+QckUhscd+BHI0AVFZY7epjoNUGnROb9cjqYsU0eG4/d4c7z32Ma0cHxJSZtgMHiznb9QpvNf2sRQPKGYwVBFfXWrSRk4zRDusaIuFqUeoWc4YH9zk/veDdd97m2eee5Xjao5TCO2/9gPlswWp5yaP79xl9IOSIHzwYCZ3MVedQ6o1orBSDqmhyCqCp0xEFRlGrgqs+CQW0MiQlkNUC2Azomq1Xx66VfQRG+gW7SYQqqoI4pRSbfMCqhs124OT6DYbllsvlipACz9y6TT/r2W63bNYbSinMZnNW6yXbtOV8fcr1OydYDf2iwxjNXlqzmGfmRvPojS/zJ49n/OwXf55vXFgef/cR79x7h2/83tdZDWe4+YykZ6yWF0zFce2Zj/GjP/ppwnBOms5obUbrRFdGEoW43ZBVC84RphXFdfjaOe/oKOnKuUGMBesg50jRrgI9HKVonGkkCj0GLk9Pubw4Y705Y7u5wMeJFCdinsjM0f0R6lijTKHJEUMdV9c0KGskVizniaIC0Q84Zdnf3yOVkaKl/LNWkPMS/ZZquVoo0QAarR2b9YCj4fkXX+b2c8+z3oxsLgf+5I+/zt133uG73/5Txu2lkIg+5PpILAJKQWMMIQQaoyBlUhHktNBrIqhE4wTsYRrNJgQZsWUEbJEC2jpUrkRZJcGd1tZU2JzF/poTTmmsNjRNy+HhNZ56ao4zjhSqFLlkzh4/Ep92gXFYY8yMgiYHvYs1xSjFGAM5Wxpr6ReW0U/YVFAmC546F6Zh4OjwmMuLFcuzM7YnJ3z7O28wDgPffeNNUNJwm3yg6Tpc09A0nUStZUkaTtRkYXZcQQhFGp0SS1C9E6FU67Q83lS8sdJGoJNpRAFtqjt7Efou9RQUUxDJahav+jRJSAvVuCWYMTEVlWLZbrdcLs85ffSIZ5+/LelKFG7cvMGD03P2925y7+5dNuNAdJHkClOauPXUU/QnHYQlR0qj1wO99oQYuPcnd/n69qus7q35zle+xe2Xn0Utel577TMc3DrAHfScjZbTzci7jy75zje+wo1rC44XDlcFPHszx4N7D0RqPUWKnqNMIIWJnC3OWHwOmCy7e8kBa7vKm9CYRuOngES7jzw6+wHjsGVaT+TkEYJ1AhWl0awMyrao3MjpVWeSLii9k1YnVFJY5YScbDU3Tg65feMF9g5fYT7NYJmZplMJ3DWqql6j5GjstCFUOnUyNO0hr33i87huIQTiLdjsuHY04+Tz1/nu3oJv/+m3MNZJH+NDro/EIqAL2BRl1BMTFE+K8uJYEg1PQkRikWNypxIhR1IU9DdaE6aRHQu/YDC5YHNtkqhCTgNKGZ56+g43b9yk63o26xVxmAhKcE3aSNNHp0QcNnIjF8O0ztAYWiMzejPrwViyNqgiOfC2FLrOYZUiTIFZP+NyteTem99ntd1w/8Ejhu2Wr3/9j/Eh4mxL0nLTatPQLBoxGZjdtKOIgSqlOrtXElJa7cohBRn5qZrQW/0IptqYd+WOxFuLGKVYRTQCU0l1pJqSqh6IWlIVjdHihzDWVlx57TPoyKxtcVrRWMe4GVhfXrKYz8QSrAqnp2e8/NpnOX/jHstlwdgZ1llhCO45gg/ceuoWZ8MDLIVhSriMxIQ1mtl8xvfefoOfev2nGYaJ7nDG2BTuPb7PveU9BmAdG1ZBscnw9J2b2KYlIK8VNMyPbuLvX+ILjEETsMTsCEajLwfSZGimluIjFM9qc07Jhs12ZBgDow9Mk6Q6lQixNpMb46pj16CUJStTDWVFyrbSolooDRSn0TmiS0IrGS/nkiDCyY0T7nz+C1yoPc43mnG9xmQDOaBUolAJQcaSqkFMGcPkMzk3vP4jXwQsXdux2WwZNhsuLy9YX24Yhi0xRu7dvSeNaNewy6D8YddHYhHo+57PfPJTKKMIw0QumcVsfuWGyrnmDpREQjz5IQj1NsZMTvFKa59KJieh4ciMPKK1ZhwGijG88NIrKCzr1Zowjhw2LUmZSpaVHoPWGu2ENltKwhRwWtMYS/aRrusYVxv8dsRPke16wzRcsL14iN+sGddiVBljICHx3nbR45uObCxjLuAsHkkFRokW3NQmpqqOSQGcSFlT+54iAbaOTJJyKGYMkkxU6pw7k2XkqDXoUut5TYmxHv8zWctcOSBSaUknyleZBrvFUEGNyAanLU0LfaPRpdAYzXqcWC2XfPyVV/GTp593TH7Jv/zyv2SMhlgiL718m6wL3VHP2eqUrnU0TYsdNT4i+gulMEWDNSQzMYQts/2eb/zp17HzjsOnr7GKl6hesS4dl6Hh0he87fjk6z+GUZFSZMIyArk7ZEUPWMiKYWpYLQfW9x8STyfUkFGXhmm9wtpAURvaZobreiQ6RWGtE82JtTjVkEOqIS/Vo4+pI0spKZzqSI0mdYlsM7pEbB6wTGQfISrKVDALzfnpBf2jx6QDR8jgdvg6TD3+R8CSUwu0+Gy5/fRL3L7zAsN24v133mO1vODs7AyVE5vtmhQjF+fnaG14cP8+pRTGccti78MTieEjsgh0Xc+zz79M27TydBbITknjbyfO0bvGYXXiFRnfgMKXSVBMtWMPCouCOmVQ1Fw3sgR4xFwHrAAZUqose9EQ7yKkTY04j97Tdm3NjRcJr1YiSFKlhnc6kR1bUyQFJieZDFyueOP73+etd97mbBhZbgamSdpBMVdgvqraAhBgSCX75pCqIErIwaoIEi2mRA1Oo3GVAlxZB1YZ2trsU1ZhnbnKXAwR2giynGSJrKKpuO9SabgaVxOMfZRE3mIz1hqsFYy6qnh1Rebhw4c8/cwzBJ8Yx4n3791l7/CQuw8ekEvPl/69v8bv/s4fEL2MBoMK7O/3LEzHaUTGMcbhJ/DjQJOk/tXOcu/xIxZHB7T7HW7ekNaJWFomDKNxxMYSS8cm97RakY3kTmZl0IcHHD3neOvd9zk/X9Gpgg6FxltUDBgcrm+YLyy5DBjXU4pCaSekJm3E0JOVpELFCW3E4l60oihHKbIR5QrHDRSS9tBo6DSd8jgdcSWLLiNBKRqdDNlHHty7z9HeTXLJxFI3mVFKCaUUCkNrOp5/4RWuXbuJUj0Kw7y13Lx+ncPZgoPFnJwi3sv76rln77BZr/j+974rJ1vktYt/rkn+wesjsQjIeLCRWD6kVrVBoYq8IKpoVK60YbJgwxRXeHKTpFatcQByGdkRdZF8OwGQFJSW0VmuhXWhgCk1fvwDHXdlpBGnC7q1hJJorRNgSY3FLjlhVRHsVTT4YQItBCStFbgOu2f57Bd/ko99+nW+/Z1v8zu/9/tCHc6FxkrOwM6oo9QuEk12mh1fP2euQlVVjTt3BWzbsuPxZ1EJ1dpPXnitQZmC0QVtFN5ouqZBYGaZrjG0jWOKokXHigrNGotupPusrUZHS2tV1farmkZU2AxblDUcHB9x8fCc09NT8fFXWEtKmfVqQ/ABqxwhevr9OWenS0qCvpEpQsKKhiBpyAJRGYLnD//wD4kq0zpDUAnVOXzSTFh8MUQagmrZRMdlmIT9d7lisx7ZbgZiVsy7ExpzTB48FIFwpL7FOYGvJpXwowTFlgQpTzht0RQshkiqpjNxTlrbEjMSNpMzyhZSCWQLqtGY3lK6gtGBpgRsDliVKBHRqyTZRCia7WbLQSwUDDEV8jbRYFFqhtKO1z7+KZ669SzjZuTh/cecnp6xulyxXq1YXiwZtgPDsGI2ayXyTjcMYay9IEnu2m2e9t8VVOT/q0spRVs731dkXw1Q8Si1gWvR0s01Qg0rtcubuip2qbuzEHwSBoVSlh1ZpaCuuuylHumKLpT8BAuman0taTaygJQPioxUkSjzamYS6pDsjMJ5r8fbKMpHhWPYJlCO11//cb72tW8SxwFrBNLhgyQdh0TNNhDnY72nKQiJXSsRBgkMVQJXG6NE5+4MWCtv1phxRqGUuAixUqsqK+z9DoMiQknM5h2zpkGFKPqJmOh6R2eMPL/WYJwmpIBGhFPOVRdj1ozrgedeeJ5x9GzGkXHyLA4PWK5WDGNiioYfvPUDvvjXfpJSDBebc965/zZnF0u++rU/4tXPvsiwnSi2J6mWHLeorGmNZnF4wP3vPaBvF0QyOY6yACSNL5opKDYFguv402++BUXe6H4YUSGRAqQg7koVwdFQpoxRBp/l+ffpEpe9RIbjiWRaJag0skclRas1106OeOb2M1y/doO2u8Y/+se/xujFIVo6wYGnpkhpNSuUFuaMdIzY4omTR0eFCcgil6GowvL8kmtTxKuM9ppO9bz00id55ukTpqRJU2Z1mZnPjnj62QOeunObadiw2NtjfbHh4vEDVuslDx/c49HDx/zge+8wek/MCa1s7evIZqd2hocfcn1kFgHlmnpX18HeTu1Xf4GrdB1TtdOoqwAPh74ydchaosg4JFhCbMm7BQOUzKvr15TSV5XBroOqa6Cn/F2FkO789buPjMRdmSuO0wfMJQbTGDktJHnjUSQF9/jadbbvv0fMEp+dVRIhjmpRRQFyw6UsCcsFGdtLsgygJflYUWoUu6Z1DuusAEFTIKdM083waarJNL3Mu51lFjO+d7it51anuGwSTWNkNGsVrlHk5LGNkxBVlZm1FmPc1UK5y+ab7e0TB8/lds3pxWOunVwnKY2PQm5KMXL68AHfWH8F6zrGtGE1DSSd+KM/+CNUV3j247d5dLpkGxKNaYjJsV1tGM4ucE1HcYkxe3zwqPkRvdnDNUf05oiBlmnSpK3stJNPRC+LGQF0MDTZkIPQmXXSjKsNM1tIaRBJsZaRYNsq9vY7njq5wf5iwcH+gVCRkdOaVgWFZ/QrphwoWpFtJplCsZrSKGgypYNGDTR5oGGkKQMmQQkCuVW1v5MrCr54zee+8CWesU+RHiXO37vLe2+9y2ZzyXYzMm4923EghkCKku1ATuSqUAwlcbndElJiNW1Q1KDWpiGnSEq5glT/io1BpdRbwApkZlFK+TGl1DHwvwDPA28Bv1RKOa/BJP818LeALfCflFK+9hf9DK31lRcAra5itXIdi+m6KOwstLvLGAM5/pmdXE4TUttTD9dKIbP1+j1LjS0X99cu4bfm9Wlda271gb+vi9CVG7HU52ZnE64fKLTLkCV+2tauesnCzZvP51eRZCLsMU88CTu3IFJO2KozcFbiulttRB9vlNT5pdC3QpppGwGaNI2MWiHR9Z3k+KlypTWPjWH/Y8/A3W9ywyve2jforFE+ElJBWXDOYU21dWsJjjf2yQJL0oQgfow0evxWDE5d37ParMXqHZKkPJXEZtjSxIxqNV3fMeWR88tLvva1r/O9t96gv97T5QEX15jxjHy5wuRI31rhHOjC3vE1NmpBKC2BhohlioU4JvKQcMoSfUSNCVcUZUjoSQxWrlhiGshhQpWxoukiewcdxzdu4VzhaL+nbyxOCVaucVpwXcgY1VbxV9a1T2U1QUeKg2Iht4XkMsUkOhVoidgcaHSRUiDK3WOq2rVRBmsNL7/8CnuLY87e2xIfROIU2A4bSn1vpRIYhw13795lfXHGZnVJiYG2M1hbOLh+jeObt3BNx/vvvVdVrpmcyp953+7unx92/ZucBH6ulPLBAJG/B/xGKeXvK6X+Xv3vvwv8+8DL9eMLSCrRF/5SP0GpKokUIMjuFxDPv7oyz6BkXCjoL4mg2nXQqYo6eVg1FD35ASilJID0AwGNH7QZ73BjRus6luSqAbjzkWeRF9bvuPt4Us6IBr9c/T4xicW5oOi7GdlLZkDWcuzPKQs+WkElqYjXQElXXmtNYy2tEfOTMmCd+CuaxkkwqlX18CQmo6J1HTUlCTrVosUoKAajaDJ0IdG4BTrJpEFFsS9bKz0W0acblLYYvUOrSX8BJB13u9ny+PEpT928SYiRi4sLjG2IJaG0YfKerusoQGc7tEuooplM4P69U04vlnTLlrkd6JRnrtZcny04nu2RVlKmuN4yJk1yjlRkARhCISeNCQWDoYwJ6xVqLJQQMGOBNJHSiFs45g7absbi4AZaSVy7MQpj5E+rEk4lrJX/zjngkxebsFEVjZYJKTLb3+N8uaS0yPChhdiBdokuD3RlS1MGOhUkhSpVqlWBEgvO2JqVCKenF9jrW8I2UmJmWJ4TwxY/TbTOsdda9p+5wfXre6TgCX5kXC1ZXp6yf9zTzmaYpmfymabTEA1FEnUAru4l/qongQ+5/iPgZ+vn/wMCIP279ev/Y8WMf1kpdaiUeqqUcu9f982KkuP17ri9uzGNNnL8VDsQyJMFQCstlk61UxE8aaiZuuuXUgm/cPU9dn2Dq59d/9x9F7GBVrx4HZvtPufqsarOXnejOSkFVNn9f9uadVQDSLOIl2Zdjw9RWnO73xFbG6JQisI4W08pdVE0Qipy1hLLE5NL0xhQVeGGCIa0Bno5/sVc0FjBhKMwpWCVI4lFTRYLZWTZSYnWNrWZRD0BCHzV6uojyAVnpaHWdTKe9XmiW/TYpuPs/PwK8oIWbuMwjcwXR6DEoqy1om97rG2ZHS1QDkIfWHQNvQ3s25ZejaSywTon5ZhVaGtFz2+cqCiLQoUEPsNYiNsAU8Eli46OfqFxjaOolowHHZnygPKBVhtao3HaiP5eGawV/mGOkmEYs5HwV4TsZAGjG6Y8sFgsuFhfyutlkNfHgtOJhoQpgUZHLBEjO1aVpQsq3BpLs9/wH/6d/4yhv8V37r/H+19/i/M3T1m++TbD9pGYtyh0fUNWGdUojq8d0ljDtZMj7ty4TSxBxuPJoxFAr7AH66i4bkp5x634kOsvuwgU4NeUMI//m5oedPMDN/Z94Gb9/CqGrF67iLI/swh8MIbs5OSW3GQxCYRT747aT+Ss8kTW5ly9AXN9w5XKAbjaz+vN9EEcuHjuJUhDof4cjJE/8/N264OgwnY9iPJktYCrr8u/ybVufFJOqDpjl/8Xeaw1hvlin12GQEa6/qr2J7QRz7pSUgLI9xf1o+QVyggvK+QNLjMnCfKw4pXQ2qC0hJXKuiIuuZRzdc4rtggqbI6IqEST/oGpRsV+aaPFNVnqAlWdk1qyzDBG0e3P6Lqe7cXAer0mxEw3sxQ8Tduwt3fIZruhaxTZgg1KUnGc/J7NrGF22NOzoSVhyagialCVLSUUTC+KOVVEUGaU4LXVlClRo7wSTrOz1W2XCWkkThNZR4ryqEbeHUPwcnrKFpdFgl1ygViIrgqWiug3UkFCRksgUz0hNmMb6fHYLCBcNLhkibbDkCimIZUJZRw6pjptkhPo9YMTnv/R53nhJ17AN5nl9pKDg5s8/WM/Di9CXl6wWb/P8mLJe+++zf3777DZrrj91G2unxyRcyQwirswKIx1NLrF+0JrG1BGtB75A6WA0XI6/ZDrL7sI/FQp5X2l1A3g15VS3/7gXxL10OAAACAASURBVJZSSl0g/tLXB2PIXnrx1aJDJAWP1hZjDfPe1t1YgBkxRNAK0zhCSrXzuVsUak+x1ONrHftJp9wwbSa22zUHe3vSY2g6QvAoKgJKS6y51kIDmnzEFqA2CqdpkpvDCphDaq0aklJDS1CaXBuVptR4M6VQaGJOmEYCNtpuhp88SYmZp9SdfUeGKRm61olgiMqWUxByQtsnJ6SUBTeGkpNEigXn5CSQVSUnhyhk5iTd1o03aBNYAdse4lvvEp7fw1HwJdEoRzT1hFUXPW2e5DG0rhHxlRHGYcqJg6NDVmcbhuGCzXagn/ds1iMxBJyzXCzPefXVzzL5zMOL+/Rti0qFMgpRK3YOtYo4E4EtjRpQdsBkhY4QJk/cRqY4cL5dcrpRrPKCUc956ZlX2K4j3kdKLJiYMTGBldGtZjfVSfgkPadeOWIxeGBDppU9VHbMaZLsh5LwSVWPgbhPQy4EZShT5mT/mEfqAT7KyaNE8NsJqwy5W8hpkiBhsLUJnUJiWo3oUXOyvME/+Uf/NxdOsW2e4bK9jT232LXGxYGczoFMSJ6TZ67z/OI5sspMWYhCCk0cPRpHCoEtmVIsPiaUigIzSXUiIIihv7psuJTyfv3zoVLqV5G8gQe7Y75S6ingYX34LoZsd30wouyHXqePH/M///f/QHa5lChK6D5Gm9roENZajpmD+R7Be8E7T56joyPsvJXHxFjdVtC2bd0xIsvzJcuLcxrrmIJn//CI45MTyJkwDbTayC7iGqjWUd2qK0afsY3ccNWz3/Y9XduhnKX4QONatDW0XS846qbF9i1FwbUbN+nnHZtxpNEtR8fHYpVGEUvBaldfLI0qIjpS1AQeaxjDREGRlDTbjNU4jDSqlMyCQ6gClSg3ra4depJoLFKIAmEpipATpyWhEjQpwTCSawNQIb0JivAFdS1zipbTTi657iqis1DGomxmO01svWe2OBRM2HJLSQUs9E3Hm2++yZd+7hf55MGnee/R22ymFb4EtnmgaENjgLzF6YxKI+P6lOWFp1xmckiUPsORYbAnFBZkDdeuXRcKUymkLDDOkjIoiWjPjdjA005AkYN4IFQm5oDSYLJCJQHPCDY8i2mvaGJRbL2oTp1rODy+gXE9L7zwKU6u3ebn/oPCl3//dzldP2L/ZJ9vvfEtVn5JdgWvHWOqRV4Vdyklr1kE9vsFv/gzv8Cw1/LI7/GNh/DWH7zN/Yf3OZm33L59LJMZxGwkIjZNURWvlyCHglax9r+kP9R1DTGoJ1O2WhZYZUQ1+m+7CCil5oAupazq538D+K94Ejf29/lXY8j+S6XULyMNweVf1A+IMfHo0UOp1Wt4BxmJHKtNq52j7f7DB1dHbaU0q/sDVORWqYScVJ90Yw3BB+nwKxgnIe+uN3d5eP+hCG9SIhNE/60l8RcKJXusaYgpYk0j4E7vJSVWqxo/LnqCnLPk4xlb9fWaWdNRlGK+t+DlT36cT37udWZPP8fhwQJKISOBkUVbCooiBwu5NCgrhqCitfgLcqGxTnZgXSg5isy3cYSYUEqyEgua4AXMWgCVFbpogpeTlPWJVd8RrWE/QOcjY+XnYyI5C7DS1qbm7nfy5NpgkptEqilN0ZqDw2Puv3dK23aMw0jKQm5qm05OFLHw1d//Cj/1i1/i537u5/n13/xnLJeP8DkQ11u2mzVTPmNQI3usOCJjsyZnTaMNqgFa8LXkUsXQtT3TGEhBNP0mKYwCo5TcHHECFWm0WJdLTCiTKUSycUg4ra1BpzK+JRvZiHJG6ZZPfOZT3Lr1DLP5gvXgGQbPOBXevnuPnC2vvvYZun2HcvDapz7J//4rv8zFsGTsNF3RJKQfJUBSIGuG5HnzjTc4dw/xh4bH4YBH6hbzvZb9l55joTNKr7BaoSm04g4XVJ0xhCiY/KQqWk7lyjMUo5wuSmz3apfWJSKv6OOfv+3+8osAUuv/aj2GWuB/KqX8U6XUV4D/VSn1nwNvA79UH/9/IePB7yEjwv/0L/oBpcAQ6yRA1bqTzDh5oJCDpKcYbeRNpcTgotSuCa+q/l2OPMrYq5MBWjrjlCJ4di0NoCHnqzIiF3l8rHJeabbJ0bpkAUkAmGIg1UahDtXNJ3Flm5oZYI1Bq8wmbnDasvWBR//id/n93/4yqWv48Z/6GbQRQUopmaQDSju0NdhWEo211UIMKoWipcPrlCZnT0yZxlrRS5TCNBZ5LoqUI6ZCF0o9tYxjIkaFHxM+ZpzKeDRb13G49exvYGMbTCkkMqpYNJJnb7FYDMmA3hGbajNUG1XR7grjFC+8+Ap337tLUuBcy2w2R2kLxdJ2M3KB3/oXv80//+3/BzoFrULNNbp1LJTlWrNHVwyLEnDbAAUh5Eaq/FWEUVopmn4B2hG2EzY4cpB8hw5NUxWSjZMeSZLAOqKyGF1v+mBIRVP0Ac1sztHxdU5uPM3B4THaCFZOwmqF0ThO0BpHf9iBbtisBsZt5M3vvckP3nmT8/U5ZxePsDMNTpPmPbn0xOIRI1ANjEEz+JF7794lHw88c/sO2B7MnGCcbELLFcbK1MtqybywWkbEJSl0UUQcY5TxZcnVWeuAFAlTwhkJpLFGE7IExrZt82+/CNS4sc/+kK+fAj//Q75egP/iL/q+/8q/q/P4XWNNqDbyd1cnGa2uUnxB6rWd3r/UMSJ1NpoqSEPXGqrkjDJa0OV51+QqTMFTipHZsap8gqLwJZOLl2gxJTWwrrjprtXoIi67GBN+GGmMozUWrTPOWJEh29pWMEj9Hwa+/Fv/nHkvFJ+GnfgoYnKWmHEjeDWMvIlVUugs8FVtrAiFiiKNoq9PGazuCD5RrGW7UjRNi9I9xihmM2jbBVo30nS0MHd7rP/wBxwvRz575xPo/Z4mQVIT0RtijmilCN4TsmLygZI9JWWJzPYTPkhIqfe+mruKWK+15OeJ+cpSSotSPWhLUdLEzDZjZxb6jJkX9lRgbhJ9ntijwW+lp2KzqTt0wWaNs5rW9bTXb3B5NpGHTFl5+txjlWY+b5m1uuYVthwdzej6Btc5lOnYPzxGdzNCFGOaeIE00xTo5jNJi67Unhi3pDjx4P5D3vj+93j/7XdQqnB87QaN7mjtnNn8kE++/Bont26wTRt+9f/8FcbVCrdomIylUZakTOVWZlSS7My92ZyXXngJ22bGXLAFQoYSFU43qGIwSk5xxtndDVIReFT0uyZXH4jGkIJMcSKT9IlaeU87pXGthX9Ny+4joRiUKYrsNLsRB1kAnFCRWYXaGU/VZpuvuvU6ifbeVOpqUYjRqHbHd5QNFcXuG2PFZ5dCKJlQsqTQxsBqM5JzprMW1zqMkfGR2IwbGmuZz3u0EpNSrOkwyU+QIsoY8uSZNw6TC9l7tLOEktGdwVnHvG3kVKJEI2CdqTiyGphSxLlHUTjjJE133mBdS9t2whxwslvL02donIiEdtHtaAGsiCPZkArSX0niOFu88gLN2R8RzpcMReNzIStPwcmMPyNhpEkmNmR9lRFJFihqiQVdDE4EDkRlUbomFwM5a5TqidGCsuhOk5uMbRVNb6FPNLPCnIZeB7rgMMGgc4AiHU6d6zSomnp+6T/+Oxy89EW2/y9z7/ZrWXad9/3GmHOutfe5VVVXdTfbpERKaosUpVAXOoks23IMO4gNw0CCOM+5vBt5zz8R+CUPQYA8GQGCAE6AAAkCQwKtWyzrSlkUKYpUk2x2t6q6uqurzjl7rzUvIw9jrF1FiUwIiwFqA2Sxm1V19tlnzTHH+MZ3uS7ko3L49sKFXlCXA4XKm29+itZuyKUx2i3reqS1ykeHhXfeeYjdVvJ8xv7sDDPj2dNnPLu55nd+73f48IPH7OZdZEvsubg84+6du/y7P/ez/OLf/Bt89at/zFe/8nW+/OXfQ8hMeccrD15nf3bB2dUlO52xpTPWTt0rA8WCyp5U6CKYKDdPb+irUTpodwZokuyjYbv19XDyFbI/B0byTWNsvUCGu2xvhLa1d+6/8oDpjczDR+9z9+5d1tG4vT1y95VXeP/R+3/+1J1eL0URMCOIAluYQ3zTNiL4wdHb3ocf7D5OTD5/JVJ2jcDmpGMipyJhkdhrQ2hhXdbMo8yW2lnqSl0Hx3XFcDHOUEFzcWFSsPNKzkiQefazg5FnWrjaFc73E6+9/pr79UniM5/+LK+8+ir7s52/CRUsCYdlxVT5sz97xP78iovz2ROETFlbp3bja2+9xfXBI6dV00k81F9ggPUu1NXbZhsrNzHenDgW4psLtyH3gLdj7xxlUJrySAsPimLvvodc3g17aw2GoeM0iBODeu+IDbq5nNv9CQTNHvCq8Z5y8qi40UcQuVxrv9+d+Z7/DOwMRh6MqaNTpuhCciMvSgaOSrFEWwf92LFhjKVhvfALf+tv8cU/+BLr2ws//qOf56zt+ZMvfY1H33iH/dnEJz72gA+evMdrD67IZbAer0kp8ezpU1pKnJ2f8e1v/Rm/8i//Vx6//5iz/Z5PfuqHuf/aq3z6zU9x797P0NvgG2+9xW/++q/z6NFD5lLYzRN3XrnP1Z27fOzV+3zqkz9EH4N33nqbr3z5qzx9+ozLyzucX9xDrhu6ZLjwZKI0hEmFhsRo6sa5D99+lx9+/Q1yEqxXlCnIXZsflROz1lY9M8J8G2ODsJ7z32OxrcLgwYMHtFH5sasrT4iyQb1r9Oa06e/1eimKAPCcrrtl7cWvaTvsEgo31VAPOZnGGbhb1Nhzht93vISTlxwQZhpKb3Urr2gi0GNvhzvh55wLHbi6ctnmq6/e5c75BRcX59y7e4/zqwuKCkWNs/M9Ngb73RnTfEa3wTGMKUueOLaFVZTDYaUivPvWn/KTP/kZ5v0ZA+Xxu4947+H7LCuUNDtm0Lda5sm0khwA9cShzXmZYLa9sAYy3KJ8OOlnrSsTmcxgQflgn3mqhYt3H1Lf/JRrHFJywNUG3dbQWwysd7cWY3inMTpZxUeRnIPH4Z9v3wI4RLDhBh8iBUkFslG725/TBWvGcWSSFZJ7MHN1VmA9BFLvxCTOYZwZ7z1def2TP8ljXuG//2//O+7le3zm1c/wuc/9BCXB//w//TNaveHTP/Yp/tP/7D8hp5lHH7zPP//n/xsfPHzI2eUFn/rRH+Nnfu5zfOzjb1BvD/zLL3yBX/2VX2IqE6/fv88rr77G7vyMz37up5iy8sEHj/nG19/ii7/9W+SSOb+4ZL/fsSwH7l6+wuv3z3nzR97g7t1XEZ0Yfzy4tQMihV0qpCrk4nTj0QbzPPnoJ0LtgyEjrM4TyRS1gg4ne0nygNxmz5OmLGLuRjy3fYBpD+ZpdTC7VXJK1PDsTJo8m+B7vF6SIuD21j3Uc7wgGjoJd3BiDRZtkJ76IzaWkG3wumNX8e+8wGzOKtvaRBRSsggTFWQ4zXWgFJmYpnNSSVxeXFLKxPnlOee7mTLtoyoLh2Ons7Lb7clpuGd9Siy9ctaPpOy8A9HEWmOXe1g5XB84XC/cPDvy9PqG83P41tvv8ejxRxjhk2DdMQHxZOOTrLg7DmIhcNpwFP9941RIN4p1C5PS2jw5WPBO6ENNPNufcfHsmnK45ZCUunohFPGuYrQW8WfPCU8vMqZO7Et1T0IBD+aI3zOiQI3RSJJpS8VyjGZqsBqWhHp2yU0b7rGwVs6yopcetjnlifufeo3pr/w4/9dv/D4Xbx1544c+xz/6+/+QL/7a7/Nrv/zLvPONP+KNv/I6/9E/+Ht87atf5td+6Zd459vf4v6r97j/2mv8nb/3d3n4zbf5lV/9Ar/yhV/itTfe4PU3Xufi/Iof/8xn+Imf+gl+91//Nn/0xS/y7be/zeXdS/YX5+z3O3IuXF6c8akf/SSPH73PK/fu8PGPv8GgU2SGcLdubeF4uGG3y/SSGKkzWljmqzCVQinVOSNJmfd7ah909VHYMlAEKJijRWHh5qtdEOqwkzDLhVyuaxB1wHZbgaaUgxg3YTRa95Xz93q9JEUAv6nlOXf/JNjhuYIvuGyUnONm3273EPnEnxN1qyzX6LtEd4sL97/bH+CkrryzaL00e9JuLsWZWGUKHr3AgNaNp88O3Lu6y7JCbQt35Nz36Tlxdnk3Aj2V25uGJKdr5uyilFob7z/+AFQ5Lu6S9LU//gZ5KlwfDgwSkrJ7CnQvAK1WRxfNCUObhmKzEwN54XNwdpgIkUzEKclYNHHsR1QGBeUJnYcXO37o2WMuP3zG9dVMF2VUi/hz7zhaODNZsCctqNMa6sxh5lTpsRUK87wLHPMcdDcv6UcYmWT+yDXr7v3YGkuFdXfGcQi5rux6ZdbM+d0jH90eePRo5eoy8bm/8w/5jV/7A9756q/x7p2P88lXf5Q3fvEev/wv/ne+8hX4xluf5GNvfIx/9I//Y7759a/xf//6b7Db7/jEpz7BGx//BD/3732em5tnfPH3fpfffuurnJ9dcPfBfeZ55uzynM//9c/z7jff5uHDhyy20vCEI+tGPpv4oTc/SckzN+vCbipUOop7OQoCUyJP7qIsKug0Yb1wea+w3++588oFPc/c208cLlZWEW7XhaOtHBOodnIC7b4l8s42fDTE3Gaut9OGBnM37hEGO30IWRzfcp6BkPOMUXn99Ve/59F7KYqA4Gq6rYnfLvINC+DFfy9K7d259obTh2sHdXKL+/RDp3s7vRGIzM0gEZCh1HbkuHZqb0jy2b+u3Vd8JnEjAnHjHg9H+mq88so9bq5Xekucne34s3cf8+r9u7z75ANur29IKdFqo1rj8uKCnBLTfqa3yre+9S4fPvmApa5M+z27izMef/iM1irTbgZV966Lz2REVkKtKyLQRvXgk+ZsQkRckqr6PHwFXGpqRm2VraA6TdmFM/PaOHLLR5d77K0j965vee88s6yVFA8cceMArL17HeoNQhUJPj60PlwH0TpTyjTzkBTVEE5FpoPKoLdOrpmRBrpT6tKxNNDFGMfObUo0OWdCmWRlfnDGk/ce8ehJZ//eDXefvsu/8yOf5l9/7bd45723ePL1D3jt9Xv87b/7N/jqH3+Fr371Szx6+C5vffMOr9+/x8///L/PN77xdf7ky1/ivccP2e0m5iLcu3vJ1cU5jx69R2Ll3iuvsPbKs8M1dz92j/P7d7ipKx23q1O8Dh/7oNnKfr/j0BrzlH2tqpl1rfSRuXpwD5lBXxVe39/j9XKP+/3I+nAlP4J627jVQeviWwo6TRpHmhvYSGeqYQgDPlbR/XOVxIiEIbPB0MDAkgOIWxL1pqeJ0kSZMul7s4ZfjiKAEDTU0ABEGwn8hZFgxFqnbkwwc6tvE9c5M8xpw+Z8A3TyDiA48v4Ae2S3WiJrceIFRikFEXXRh+CpLgzEmttMtYWP3v+I3e6MJx9eczbfsrSFh++/R7898O1vvoMY1N7Q4qxHzKOjl/XIk+tr1ha58bsd9+7fA4XD4ZZdPUNTOhXDOIcRMOLkGzZFW3Vp0rAQO70gEBnDo8Q1J9rqPIucEqM2ug36GBzaM2aFx5ro5YLzDx9yc5Uo68TtVJ01hy9gkhgj0pJTAI0Sn09tR4aFvbsZx9Z8VBENExR3tanNEHPL7FodeE2rocWQArROP6xUqYwdXL75wyxt5e2bD1nLFbflSPngGY/eOXBbPuD1e/d576vvkWfh8cNrrp/CncsrPro44/DsCdNOeffPrklJsBmmix0lD+7eP6f2lT4auzzxUz/602jJrL1ThiJZqcvqNmWxNk4i4auQQlGZ6DaYS0GKQHcGQ5omx0SScPHKPfKrhaRPGfUZt+uBIeKORCRWxQtMF3dzorPinZ87y0mQnzJGp5qh2Q1Hoxq7sMobNoifU87+c3HSm5Gs+sasD4/B+B6vl6IInPgBsuEAPhkbm9f9c8GPjX4iBZmZr8kENqHRsBbcfZ+NTksC8VShLfYLGacQBwnRTsrFqbMIeXR09ap7uFlQMnna0yocbxvdhOtyJO0SrIO+VmiNMTqjGzkV1rWiSZmmAgzPI1gb7bhyuDmwPntGOptIJTFqRcuE5vh+uh/efgphgNHD8KRH/mDS00rwz5tGtFu/WawPlj4cVCT24wx6SjxuxvWkfOzZgbMPP+TJ7pKxOJ6AJo/WiodOk9C60dt2vxgwYtfuvcspxGUMvyHFvfxVJ2jQDMALXb01TIXVVix3Xnn9Hm+88QZnD85peUCB8uANeq28iXAmhXZrPH10w+0HjTc/82OeLt0PdFs4jsobP/oJpqmQM4h4FqTZ4LWPP0Az3jozU4oyJXUb8GRkhboO8pzoXX0D1IJ9qIkE5OwFwMS3RkP92dQsEfNmdEsMwwlWzehTYUih7Ap912EvyAojCV0J7KWTQjTV00RLQku+9t68DVrrTKFLkTFOSddZY/xNchrFMItLQBkQI4sLxr7X66UoAuB7T2wT5zohAjjlxJ1a3dDMm5nz68VHArN+mlNRIWtm7YZFAam9ohm6GCXvGHIAiW1DJNLkvp64Cqn7gXE9QzjvHA1jIudOOZu4unOH/dWO5XhkzplWW5g+Ns6v7jHUVV6tDb+VbXDZLhht4fqjJ9ysB9LNwv58z/H2FtSzEefdDrDnQaynQ6a0iCyX6O9c3+BcAwfh3PvupIAcA409s9CRan4rtcYTU759PvHp92944/0nvPexGKdqA1VyaBNG73QZ5FzIkXlgIWZRkTAxsZNX4rDNc2CgqbAeb5jmHb021j5Y187+4pxXHjzg1Qef4OLigmFG3inHm5WioapcDWmeI7AcFliF3SiknXK93rBWZwTWUSEpkzpLrmdnUXZ14ZcML1pmg5TcOMUl2WB4vHvO4gWugNWVi7MdobsK3r0F88zn+2VdnVkqfqhrqDaT7sH3KDSEEYlOaQJmgyKk80LadSRXRhJyq0wy+Eg6MheojdK966KBTjsO6y1Z3IPT+qBMnnsB/racCmMMZxB5p6xusLsBjN/r9dIUAW91XuhZttK1EX7ghDqDrz0kuARb5Fc3xwEMJ7f0mIvSpJyd36VsqUHqmvonjx6yn5L7AorEQTHacuR6cdvvgXFx8YDz8zto3oNMXN455/zOjvm8wAw53+Hy/II7l3f56OlHfPNbb9PFCTrHttLM0VwZzoQ0UfZ37rCuifX2huubZ4goU56c5Do8YRb8famED0KawByxl+EmqxYj1BrKaBtut+7CRp/rxQzr1QkmZuTdDqkwkvGlduQnMX6oG7/VjgwEHeamm+Zqwpzchtw3DX6DOyaxAZCxDQAQC7KRZw+mLOyuLtnNM7v9GdNuhz/NntWYtdLGU5Iaowqz4LclCVsHhCrQuQiD1lfGGPTu1vTLWuk6mLLTpcdoaKDpsI2VsWRNPmiriLtO29GJdOZK0M4gZWN/Nnlq9dhMaJIzTXGgea2Vkn2pOXB5txuuOA9gxOijOZyPU0GmFZsg7RImlTmHrX0SzlCetoEW6KkhOUDyMZAitMVOY9cQnD7dHcBNmpxejhPMnGjmWFKrDa0j/Dhf9iLg75xNfguEePsvFoBNErlZiQMn6jCAlImzq3OnIaNILh6rFXP1yBPr2rl68Aq5JJbrj7ButO7STf/7BhcPHlDKjOQMckEuF4xeGMBP//zn+djH73N1f2aU5tr+boxmpDwjv1n4o698za2oNQhOEABewaOkIc17dlmxtnC4ueFwqM6XF0jZBUZFU6D7Sh/X/jyHW5FPjxJ5CQSeEOvFbkhOsWp0vkAa3gkt9cBVyxyWzrcv9qyHa95YBVtuqZqd8JRLeCYm8m7mPPthkOL8e7ccC5aj6MnoJOXEsOQ0Ywmr8pJJw+t6H4t7LwSwS3KVqCafa1UGLXdffzVBkt9qOWcGjWYrTZWjrAxc9JUAC86HZMOaomlCxIL27W26GJh16vDZW4P85Y+cp0ZZmLJKc3Weqjpqr8UPWRB0UvD5VYQe67lNNr4lOTcZSE5Imki7QToHWTqygzILlISJcgacSeeWlcM8MZmiNQhxC2QK9QhtdGx0uuAbnHAV3mD0Lch3s+kTSbTlSMrf6aT1518vRxGAOCxxWkTQ7ntuk3G6DTtuFtbNwTJ/WDO78zPOry4R9R9C7Z0lRqQwA8Y00a2Rg2Cz9EG+usN0eYdikX48FY7Xt3zw6DFp3jHMXXVFejgJG4yJy4sL7t+/ootzAfpw48j12Cml8+mf+Cx/+Ed/6iQP87ZsJMNWv8HNXFAgUhDtjNS4uHcHq5VnT585vnB4kdvg1FOz7i2q+H7YI7S94l/euWJUL2KpKKaDnIWcPUMv58Q87SErqh6zfQWUm8Y7z77FD3104MfvvMo3L+6enIUwmEpGxTgLI1gTdf56N9bR3BhFEyMUoMP3kzGruktiGsM1H2aIZBI94rRjvg0nZUsCCXR0JPnPPBLEoXs+38YqLVNhXV1SK+a3uyYloHGGDfra3N691VPUmuIhMybAKPFwxPsNP8uc1C8ON3zwTY2wzUGkVBx70uygrRG8Df9VTTy1iMyBzEEKd+8sSHUadDqHfGWRm7Cntz1tJCQXpjyYkpItocPPQ69Ql0wfmVqb4wjr8I2Yup+lhr+GmWCWYqXbMVPWdf2LBLoXXi9NEdAg/sjm2JvigcL51mYGEaLQhnH33j2meedOqiVRW/NYshHpvWjsFBXB26SSJ2qtQbLxeRpJHEfDamOy2JCX+blnuw339WeE12HneL0ivfht0hKHmxve+tpb3NwemKcddx48YDmuSEoOzIi6xl0kmHdKC/mvQ7wORknK7C4uEAvaLjzPRwiAVCKsRFKAqObuOE6CchaliAUZKntOAJuQKlNHZ4T8tI7GMQuPziY+9ezA/Y9W3jrz9r7gK1frHotWWyVriRVrHAbk+aiD24clU4o4YSiJuCTZPF0JhNYHEvkGfoE1UimOyzCe6//x0I/e3dlIUnbA0XoQqnx0SznkzUGg6h20ZFrrpCy0vgIuH7fo3gAAIABJREFUL08KJt2FNWHwutmoSfBUUtbYjBgiwwsmAkH8YRBeM7qV6Hgn3mmmIG1ZNawKtWSOI3Mrhd10IF9k2A3aPDhyTmWiasJSIZmLjUpWkrk60xhoh5qNuiqJRGtuDac5ET8eCJKZma+HnfYNxOrwB+Es9P/rayMEaU4RRe7rPhOPAZec/eFXpYigY9DyTDPcAahteTy+OjwefTWSJSq4+O3ZImbMNQle2I/rkakUhrmBxJwLpOQOR+HFpyk05t5/8ME7jxl/9U0+uj3w1rf+lGVd6DYwm3h2c+Txh2+zefIhbgfWeo8OAPrq0elYc08CtUjHNUgl3I+K88ZDz7+5KAEO9qmg4j4DuQvTrtBqQ8wNRz06PIoHHkXW+4Lh6c7eAQ+OInztvPCZyXjzycoXPzaoEu7IKXsicRs0MVqMAEiMIJsZa9zQKQxNRl9JOXkughlZvBUf3SPTxjB0Sq77V6H3SomRTRhB7mphkeWd2xb86bdFRxVKEqeXm2cqdBsUSax1Zd6VIFrFvlm8c/S2WKit+WcXGRabJdyJnWlCyZMXBpSFhiv8vUiN0ZjSPsBsv4F762ju2NooTIw6WMvEwQppZMreqLaiZ8LRZo4yc2BikRmb9uTgYyhQphBpGZg1csTJWdpTV6cO99XIxd2nRd0evosrDJP69yKKF+WXHhMQqJPTKzeK7rzbIamwHCumLq5prdGam0S06vTLpS3oaf41n5Wb0ZOFtj3iy/CZXcS1AyAuqjAJw4U4MGunaESOhTOMk3MGpgkdxlvf/Br6G4mhmdUsLM9Whrqwo/XKaFDFGOpf28J7oNVGCoYiGCoFGYon1Z8gLAfccH65xY5Tt5Y7uEKjg8aOmMVJLTk/N19tfZDjRm9bwlEdpw2CDU9t/rPLHV++e8FnP7zh1Zsj713McdB99h1qdIui056bU6gMfxNjoDlDr148SN4t4MXXfZQCvZZYreGMzZKFMmXaWNyfQPVEk00qDFsZ1tnMRd2Ixd2BW4JsKdaSm3BqUFSw1pimwloXP7xCFAUvWDbcd9FQauvkHGpFExCXcw9Tl22PgeIZBMOIthvqeJ60tBU4mlubsa6QOv18YmHnwasCcnbLysQtM4c+s+jEDb5BkooTYTRjonRxfMIsY7VikzKWgaYdrXuSiWMCRpl8bM04QLpWyCmCZxSm6SWnDRvC1WuvMe93J767qbC2iqnHdouoC2KAnDLL0QGinENsMQIAA0+SNecUrEF1TRu1WJx/v5GOiDbWAuRZW0VIzJJwS6cN1XPKMtK5vX3Gs6cfMJ3dYS6XWIWOt92tdz56/JjeYKhRR4td+0AsuZXValEEwKwCDdV2ci0eZtEG+9c9kafE51f/uUcRS9A2VFzdIUfFb0aVhPWxkYB9F90HtXkcuQZX/zrDn1yc89cefcTHr1cenu1o4nz/TXfRY8QSMdLWTXUjqyJBi2ajbIccujf3cNywHUr2PL7hbXbvlZwLdW3xPRs9ubag9+ahLdszEriLiTr5qZjj+SK0tcMUqVCxXpSIWffPTzBraDglB2kAUH+PqqxLc8WmOsjZzZDB6fZPEsBn8s9E1VWCvpGKNa5D+ojFWrIJVFhypjBxOzrdOisTR2YWZlbbsVKQ7h2HI/zG2tcYH308W8Uvlaqeb9CGeS6FKGWKcZMel54/sGM08s79NDfj2u/2eimKQCoZnYqTOcTQUhh1pahyqNWrb+9ozt6a1kHWyU0tDgu5bJRjn/8FcSplgIujRxNn+IO6teVRDLAIJDXDB4AgHvWV2iq76YxlrUxTcd/3JvybP/gQUgGZqLVT18bTm2fszndc3rvC5kzLuNMMYfwwBtYGMjz3zuHsTYDinYHfnN4YW2AkvbtNFLG/B2LE8Ta0lBLAlDMKjU6vhhaBYfE5BL4wjBzfu2MMEyOtPDybeFZmPv34mrfuzjw8O6OTPa5LRpC5BjkVFwttu3O8dZ2DHowoy7JStFDbQkoTaxz2FsGvKQmtH9FhcUt7a6OaOB5Xd5weQrXm67ZY0a11gCVycq+Ek014cjNWZWJZK5p9w+KbMj+8Fh2IV/Tn7EpfWYiH3pqcGIDeVXjRrq1xrGtsCtQxCglDG8c7fWwzC2MZWJeVpEJ72ukXE1WEmow9iUMTVmZWnema6ccBC1iFLDN1rDBgWPfPAFilo/tCnhraBJlALb7/AWkuzEnpONbkFhhCzsq0y8+fm+/yeimKABBW105qab2SVVnrOBmKuOutI961jpOQIpdC65WSfGWTSCdjRzOjrTWCS/0B3YQwrW3eb50kXlxEBOlGH5W2LH7ol5XlsLAsLq1VdVvrqeyZ5sw8J1LasazuvLuulTGEdljRy9lvyOyyWwtqqB9gPdmTmTW2JCPg9HBBSEHhxG5EQrVnxpaz4PHrsXLbRDyiHkIBJ7alz73jRMQyDOvdlXwl8dbVjh//8Mgbz448Ljt6Np7aymRCEvUbfWySYw94zZLJqoSrmY8gOZ1svY71yK4UX+lGmhFiaJkYfeVQ/efTR8ckvqOOs/BsuBHKwCPc4/Ba75SsYTzTkan42IQxaYjLIHwgn6/LJAJhEHWnJsWVoz1o2epYkHcO/nH3mMvd7/K5kU3vLtRRMmP4c6MoKx277eh5mIFmZRyFutvxURdu2pFGYqUweoLayFYopu6JUbsTnsxH0MGArJSUHdQeRtkn0i5DU3Qo2bybTmWHsDJGDT+OGKtS+svnDojIXeB/AH4K/xj+K+Ar/ABjyBBP/bHhjq9r7/FMb3ZjA2yz+/b1COaiGv9W5QTSiIrz5PvwDzb+ns0qbEP+e3MhUn/BqHSYs82W2yPPnn7EcVlQTUxlosw7zs7OmeeZnCfOzs4pux1JfF318OETB95qp0tjXy45tIPfRMkNIE0sAiOCADO2XIWN6/Acc+b5PwLOA8AcD9lcf3XE1sKcRCLDTvLUzY3Y/7DzyTdJ8maUInT6EI5J+fqdHT/1/i1vPu388SuNdaSTujIP76hEBVFzsGk0JDnHQ7NiyVmGXQY9iiwiNMzzBLavq+Buy/6A2gacjvjOh3dovXVkyo7haAaLC22425GTjZzLn2IsSikjXWktTFkQXz9uuIq6wMtXu25a4hJ1/6y9OLuALP4E0P29iD8r7piUfB2HxmjJCWuw5tmIQ3DOQazvWk60fEbrYCss64oG1kOaYHSSmpOpzMlauXiOxLBO3mVEErU31iMoCa3iVG+Nz1NdLGS43mPL0uhbxN93eX2/ncA/Bf5PM/vHIjIBZ8B/ww8ohswM+vAkYczQ4ZbZIuJIfaDhjoJ6s+54VBiACsGdlACe8BVhynTzAuAYgVuPKX572kZVlli5mAN4QyL1J2cuSuHm5sbBlZ1bi/sT0ziu1yztwFR2iOyZ5kTOZ0guWGm0PLjtkS8wBrFj9FbV5PSQvrjBtdOvfxHN7W2c2IN0R9tFny8N+nC8QMb24PlDbWHeOqyd9uwyfKOSi9KH0nPiT672PNzt+KuPbrj3IPP+ZeGiZ1YdZM0hpPF310cnpxK3u8TKU8LmPoCzcLNJ+JwqQZwyiIdSWHt7rgvBY7uTJSCFh6OPCWO1WPE5gzFvK9JtqzRwMlTc/CWH1RxhR6dKrz3ETZneHPT0n8Vzk1on2vh6WkRoa+Vk6z3sNBJ4kXLsQsQFbJsLU0oF7cKgYUfPHqQILRlpTozmK0SakHNBcMFVIjwuAlvpMjzYNrl2Ybiii7QqOkFdOzoV0pzRGovmlRPNPMWmacQZ+16v78dy/A7wi8B/4QfWVmAVkR9oDNmytvDy81bLtnduDj4xBBWXbMoGHpIYOCNsrZ2cJi/owY0/2Y/rlgUnYTC6ocotWHk9ZkY/VKUkHrz6MY7HI9M08+TJE66f3TCGMZXEfrdnt98xzYVUJkaD3meurwdPPnrGdJU5WnXE/FwYuw5NsCUKW9xK1ILJ8733Ntdvr5MoJF6uHH0xaUkDsDM0VnHqSNwJBI2fYTDZoiXUgZnvuVtwAlo9cK1n/N6rB/6Dd97n848q/8dV90ekJ1aLr5E4UZVrr2hy+6zTGlWEXsOJKCmjK8uhotN8upUk3qtFJ6PFD2wbHidvYQybizMxvXfx4rsVIXBgbuBFz4Y7JWeUGh9QEsOGUNJEF5CUnNkZ8mBX5IXaMQxpnHxqkRrsX9mMsLH3Q74u1YFB4nPsYR7CYKi36X0Z6CTU3pwqbHGgF6D7PH+WJrJIGKj6RqK31aPmx2BXlC7BpkxeyAYD3WXy7CQiOxqyCpIGY2kubqoQBg+4knbrAL/76/vpBH4EeAT8jyLy08BvA/81f8kYshdf27PeaqySAF74X2a4sYIJFWE5rHFoifUXjjIHKaKHS1DvfgtIdAN+UBTG4PLqklYrba0+w7ocjtEaU5k4HlfW2jgeV463a3j9ORHk9vbWST6yY6dK0pnd7pJn18KEseYFO1eWuSJ7ocyd2vTUGm7n2mrGJ343l9/Ov8VoMCTQLduoII7wBlzg9NQeKL6AidLMk283o5XttUW0DwSkEPcDYupchSBkfeVqz8cPe37iceVXX7vmvctz5jXRc0esM7LHnyUtfvC60aIIpOQbizFgDLcPQzplztyuK7u5oIuvrMpc2Pb9Ij7GFYWgZWGqYcbqa9yUCkndfhvGKcdxjBEsTF8RO+znATKMTk4GNkhjUy0amKKkyGt4XlS7mL/v4YxGw0ianYRkLbweXV04Wg/TW0XEcYhmRkpwbIPZZkYHK86GZfjIainoux20OI6wff2hRpkLQqJIQkxJNEiDVPwwd4ucy0moy2CIR8/15MV+4xBQ08n70bMq/3K04Qz8HPBPzOxficg/xVv/0+vfJobsxSzCMp85vRToRuS4c0JeT3FgtVH7QLLGjt9/UCP+t/PtfXXtlTBa040DgGDqEeAffPgk/lrD1q3seOFZmz+cY3grW2slZ2WevA29vLiISHTj5tkzbg8fkPOBtc+QDZsU2xnsFZkGZxw4ZFh3xQ9GFqRIKNaeAzaba8/pvQTZJ4s/KhbAn+/SLUhD4STUhivW1LkDg05K+dQHbkk4Lo4evrJU17eP4MIrnSeS+MP9xGfHwo89ueGD8x0yJvp6jFvcyUZlivc9AmvJrmoz87Y+x3qvMxjrIGVgWZlTJiPUpaHJySyiTtgZw7ETFWF0J8GszfGPacsMHJBLFDFx92kJ9l5K/nvEvKtL6miliiCj0cUxjbb6yKDBCbCgobdYcyKOKT2PY+v+Gfd24hK8ONKM0VFc42FhtjKqZ0hqEtdQixfFPjxPwbe9QYPuAiUhZqDGCGNYTWAq/rzL8C2ausPUbvLAmNE3M1kLvYV7PKrpqZsRSWz2pd/t9f0UgbeBt83sX8U//y94EfhLxZC9mEV4fnXfRosPWBKKsKzmFTkXem201p6j2rahs24zbgznCaz9L7TTLwqNBkYdsR+OtZfwYm4gp5Z5DA1PA+Hy8gLrldaOlAK1LkDh/ML1Cnfv7RlccLN26rFiO2U965T9YMcN5+MZicZtuWA5n7EWZ7MYVF9KAt/53gEZdhJMbe29nqjHgRsE3uEmoz7bjih6G9B52jrEn23RMSUjcgoTx+bBKV2Mr17d45uXD/n5xwvv6of8yR31kUyNZXWac7+t/rkrnjZcHWRVlCEeAIJ18pyxNljXRlVo4v6CKcH5RYFN8hyg4eZbkLOyHKtz482LnCI+/zeYSoGkaJpp6/BtvmlsYPDxom6cCV/9bZ+sqh+K1oPnH4ea06HfOgqjr5UUSfNe4AK0NBjdtQhiG87hn3mvA/KgN0WbuOdE9y2HJiCHT4GNE6A7uvMUxhikLO4gpObFXJ0aTjYXZc3Q1iNp9mJCB6lKM0MbPlJoYSQ7Fbn/t9f3Ez7ynoh8S0Q+bWZfwQNHvhT/+c/5AcSQAay1Mc87zITavPXfEnMGbtm81ko6rdYsAMXn886L5BqPKTEEHw/83wubF8GLJCBEnGq5gUHdK3omst1xIU7rjeNSWdanGKAffBjIayLND5DzHVxA3w90r1zogd244YJn/nCq0HaZtvpsamkgps9n9RdeEu/3xbney9Kf6xa24SnAIDMH7VzvED/D+Pv6aU+egoYMMmLLQKHVQWuDa9vxhQv4L98d/M0b4a3LytEKqfn6DwK38U4dTcqyOCkqJ5zAkgK3aYOGg221GpWV3TwzeuN47OQMucj2HQNOjx3d2JWJZaze0TQXH43qTj90gYH7QEbicO+DPjq9rwHiufNuG/F9prj1R3suwz1p7S3yOZ5/nhYGHtYGptHOm4PUNsSByjAdsOEMz2VdKRnWETmTLWFH5xTIUEYelKFoctn7MGOIH0NVQfNwXCIJbTRv9yXT8dWhqTG0Q/H3I8NITSAZaRi5G5PO9GsvgGPESPzCBfPnX9/vduCfAP8sNgNfx6PFlB9QDNkYYGliaUZvlY63bGZwOKxsrLURM6IXgA1mH6gpL25AJJbNFgXiZExCFA8BiPjtoNhq3tB0R3lH32K5/MNr0XWsccO6b14mRT7BQNAiNG0wKfM0yMstO265SEcfDu3IUfa0aQ8Ft5ZSOR3SF/972xqETcp37Aq2o6/igqKtIG7MQoubcNiIm81vrR4rOEP8gRd8xThiT26DLIL0ztuXl7z7xPjE9cpr1wfeuTMz6vCkI9tWYoHVVC8IQwYk93lQVeYpuy2ZeFR2C0C0B2Yxmq8KTRxUTKSoBRarW2fqtbWTpeB2ioks2deh/uxj5uEbav6MiGWyKMfasbbxA4wapKkehhtJ5EQvQwS1Tt8SpV94lrpsBcA2gMpn+ZRo5h1PN39uShK6RVBo9s+UkaASORK47FnERUYjOrcMQgibnGNOmnwL5ivUyujZ8RMRB/sk1JaTX2i2M6YWF0oxBw71O525vtvr+00l/j3gr32X/+sHEkM2MG7Xipg7t67RWsIGiPnTnUTpNmJH69kBZpzaY4lT4BeePD8V29fpLVBcLyYat1hKvhfeDDwNILlbi7wAqXSLlFlrqGS31FYla2JYRnTAnBi7Tm43XOjKFQvpenDn4gaSstqB5eLCi1xMAjL0VAjs9H3EIef5DpohcQC3DsHf2bbT3jqBUooj97FOdIAr1HYmIUF2tl6XQYpINQlz0C6NdWR+d1L+wc2Rn3mWeC8vrLp9pI78i0nsJjb1on/mU06IdVcu5sxydINSH2nguC7MAlZm36ubg3itDS9R6kRnhp2Q9Ga4fsG8c8mi0U67oUfrK6aJjGNCzYRag4rcG5LjPeKgpRg0GspAg6Qk5iIjI6jbuNGou1f7zySrQoiMunW6RL9ZfMWtnnXPsMbaYdbZ13/iB5pDg12suiXekwm9ulisVy+ADuwEh2I0ujhu0xnkMRzLUYM00BTBM21g6rwOsm9xRg9l5UuvIjQH47I4mFFwx9Q+hmvxPW+JYZHHNwyNfaoFgO5wObGK99vVPQifz9SoBCvN03NUjGmfySUjVmGoR5TVTq0eSd5j02LqtFmzHoaOoTN3WgbgBhjoQKUxc8POnpHbDXorUBp3Lm6cL64r1+cJvRXGLbB6axncQMRcfjtihPCPQdDs3/MmytnotN/RJYhSl8VvihhmLdpcEZ+ZNxOWFus6zSkKaRBnMJY0+L3LPR/Pg889OfL7+cDX7547iKXVV7OWXD6cEoztezCGuMW5U7Y9Jn4d5rmK1pg0O2Ambq09zG3eVJ1ohcTabWh0NplWR2xwPDnZRNlPexBYutDNzWKGCS009EZ2kxAr0IRGI00GOVKuzd14Nj/CjUAmUSzUXH6+dmf+2PBo9q499AHq4Z/dQuxkDGocuIJIp9kRs0obrklgdNJaPKQlWbT34QcZNOBWKyrOulwkzHeTb2ISRq8rQ5ShvhLPZ7sT7dj2g3GErsKqzbsa9bPzvV4vRRFQEebJAUHLPvl28f213/jRJvJcO64UXyPVjs7ZVzCx9/UbL0aGsM41XHJqYuTstlcp+TxaimMIIlCbMI4LWTOjiYNcc+gKMkx5cvTWNCTLERyqndHkeasoQireuuYMOguLCiWpa+yzwAQ2gQ3PPhA06NMARpJM783Hk+F24fKCbeygO5EugKlta5DTc768qd+oPcBAMUWJdZaqi1Z6+AWqt55SEyrw0VT49cPgs6L87Lrw7tG43b2CmDFwT4XYR57GAwugy4arPVUSS23hE+BjAiIUdbBR8Fh3yb4dkaRuAiIREovLyzfhjg0J1d/E9e2R/byndmdLrAbH40IumTrcC6GP5zerJB83Vf356HgBGDaC3OObihF5FdtoOEt2MPAk+no+njmjFUQ7SRzo88fVTloFA0SNPppfG5ZI5g5Tp8wGDOuD3oQ0FwfCASnQR3Mq8egwGnP256P14AVEUramEGxl6OLhLSbG/wcu+HIUgZyVi73bUIGz+dqJI+AHIEeCyhaLJSQvArMzCFPyQkDITSV2uq2twfBqSOxScxamIuQCU1FKZMAfF28pZ5xPnor/4HOBafa49JSdhKSSSJOxLhZzpc91TiNN1OmcI7eUsjK/Ukl3lKNcMOycQWI3FcbUkDPFbMZsZmvnRSBll/yWkrEoOojr+T1jIAX5ZoSU1b3p85TDEMPfeylOcXWPH5+9azMyRo2NTE4aQ4+53j+7yepBlLfuPeC3xxP++ocLH06Zf7FrtADJetroxz7S5ZzYhH8mbnelomhyUDJrJqkbd87TzFwySQYlK5JBSuFYK9YSY4inLnfXS4v6QTUxrCeO64Jq4fb61vkjrQWYZtDcYWkD97r3BAi+qvSLJbZHI5yUAwew4e7DAKn4xUAQyMbwzz6f9Ck+i2+FmjQomtmSoXrvdHMachPnQExJMRpCjm7CgkNgWOveMY3kuRmzZ2fKLIwssclwmXkpnpyF+li2rhV3vHDiG9k86u0Fnsz3PH8/2OP8b/dKSXjwYAfi3wxSPEdNoLYelFNlypleK2Zu/3x98Kqf1C2+pmmCJvS+7dQh5W1WzTQWkgq73UQWD8DMk5LVhSDIYG2GpAy2gjgdVdJgmoU5K7lsQR/Gfren1o7qxLoatRgj+SpuLZmFHReTkM8/5KDnHG2PlT2pT6QCY07YPKApMEcB8PWYi4pyuMduXAVXtfmMp1EYPGE5h/JNRV2Gm5SiDoolc9zAb63E1BrNhDwSKVJ/gaBVK5LAbhXVxHoLv3R3z6evV37hWeVP56d8/eqCZBM1d0ZrQX01hi3YUBp++Lv0mME3mTGUlMiTosmL7JwSeXKORxOjTH4FWx/u86COESjqisBRqNbdt6F2mqkTZIYF0OaHWgTfD5k7EIMLiugNxBh4pyIYakJr20raoYipRBeGBvN0jcLr4p4eGhcLwG30EUK9AbYi6vmKNbAuKkgOZ+YkUCYwxY2SvTi31gJbaDQNDYz2yHv0n5FH1z8v3qt5/N00TazVTVpQ/HM0o1UNEPslVxEmhauLiRo3V7dBCWyo9EBIh4cr6MaaE+U87V0jIAVG8NOnFC6xE62tJJIz3DIUUW+hk1ByomT81wB1UtkxbhdSzpSQ8BqKSGOaE5MK0y5szs3FIq05il0moZfCklw/Z3lm6I4lw3HsOeoOy2cca9h6MxAV0i4zWoNRvACEH76DjfW0xtrNmS2bME1zrEbxcSUV/yDj5tvtdifkvmiKQSPissI8c1ZlqRW6vx+RHE40mXU9cnF+SbUDqRT6kvjycssvfHvhZ9fEu0noaabogb7bO/pfVzQQ9zJlR8iTOBe/KBqS57KxJulIKkhxk85SkrP0QtDTKySyH76EA5nm6zoNA1ffOPhh9i7KgTYnh/mqJ4mBbJJxZzR2cRzFDV/cyNQtFbvLzBXW3phm/5mc1pbD2L6az00vkNAwp7YnV1QSWwULxidRNMq0PVuVpAUio2CY4wMeK2MwuU+hx8LLadztvTKVGA2CKLZlUWgSl9sPQ+cEYyUlYT1u5iPf/fVSFAFNysXVnsO6gLgzau3e/njijbsOra0zWo+wB4GGD0BMp/ZfmcFmbxvljNYqva/k7FRisUrOUGZlUlAxVBqlFJZD5fJ8cveiXfIqDohMiMDurKDG6QM1gdSGewWYspAo+8JtXjFJ1N0dDlbYzYkjhUX2jHxOv9nCO50rkPYJ1kKe/GaaVF0pJ06t3aXEsI5qDpszR7BV/JC0PvyGyCW2IX7YTy3gGMypRHs6yNOeWhfyJGQStXrXpZFsPOa9A4xjh5mxFOMP0yu8tjzh8x8+4xv3d3zzcs/QHZoSzWA923G2VHROtOQMOhUBUdZl8QKTPGuxpETJgcF0l8aO5J+HLh0pCeiuEA0MpwexJ4mHbvTF2GVhHAZjcrMQCVXoiDm9nLYZg6GdGr6GqslDbOI8D+lBVfb71n38GqKDUvwScRMYv5B8w9zpwy3NTJRkPtZqttjrthMHY62VTGG06qi9KCMp4iR/Rs0M8Q7PIvXIiEzMotHFgYPPBWP1Dqs3hmUQZxtqcp8Br5mG6Oxs2rSt1L/76+UoAiJkFXaleJzYGCRxLflQTpXegxSUVl0lqF3opiQykgpFZ7opZS5UGrU10prJTIj6B1e0YNZIeZDw2Qq8jZ7n7Ldw9gdpP82AQw2+kuvo5G67OWdq9zgolURCybJnTIM8ZZp2hmbGNHM7oKcdonvmRfw2LApnAUBNgiyFlEBTmHdgjLEwTZnWDiDEjS1hlDkxxmBZlJTKiQuRVJnmmd4rS61kdYfbrMKwEkadsNvtnfGmvstfl+qstGGk+LtrczbdrhjPzhO/uYc7v73wH37rlt955S7/5mpiEiVXYy3CmCTkrltOgI8temeHDV+57tLktxZGyp4g5Uo371Zy8dWrjITuZlpbEQldArC2CNuUgY0EklnawIpvRdRCjafuyiOxvx+ES/UYkUuwzchyutUx4bh0RNzIRFb3DPAIte0QuRRZktLH6loNCfVqb4xSyScCAAAgAElEQVToMsdwXwozd5VudsQ/3s6ghMtU0J/NqHUwkpBMofvPkKAZqBY2erwm3POCxqD4Krs1hnnxmtRl3TKUXRHWJpQ8U+tLvh0gbtfefCUoAjl7NSuzCzg2HXWz8OQH8sgghdESvXkB1tnYnXuLW3qmL7hTbFemNKHaXf+ecKBIBdVC75V58hvHsrvL9HBudS2+CzOy+sNq5rfECHDMR4dGFyGXRBOlWffbZb7jGvUOOxV6UnTyfXLRhFVDZ0G6F5qScNotgtlKmXylVZKvC+dp2xq4Eau94NDrupkjcylu0upECkbrzCU7qSoltqTbnMFzXxI5ZXcBtkGahMkmbMDh2NmNHTfANz5xl59+631++Jvv8O2f/STH1JhzIonRilBKmFhIZpOTODMOJoQsPpYn3LPQ3ZZDXivEP5sr6ZqTf3L2TL7ezP0DXWTnByDm89qcYpzYXIAHOUWUGpzei8Yak62F31ggG71ag7wUzFVpnSknuozAYSDl7F2iCBK+UUQqVJlcYIV4d5aLUNsSvAC3aOsGWWeXGncf+yBjqwe1egEBaUae3VI+zwXDAeCxma9i9BqOyJvrdHPwMyOoOfBak4+13+v1chQB8dlx805XVZ+Nhzmaau7YO0mhj0GnB0U0iB06odPOqZSzYrmRJsgDZJ+wqsgiTKLItuPdOOXE3t38oR3mYFpvjpWD79NVvduwHoSSmEcluZfdNO2w3phkx+iwnxMLA7pSdbBr3Z+3MTgvE5KENCVY3ctOK1iDZGHSaRU0x43ntmK+B/Hdug3/JzOnU2tEr6FCmoMyLZ5VKAJl2sXGYBtl/Garo5FV6RnE/EF3Qo7z49e1M8/KKoZOZ3zrzcTH3nufT797y82PN/74QXGvR00MKcwBACIOCMa5wYZn9LW6OrlJOBnASrgHdWuUOSPWabVi1rwAWmezF09BI1Nxg9Adbt9uxVA1JPlc72uxxpRcVm4WbTyxjsOBNxMY3bEXPyqDlIsXpWHO4Nvs1JKcePiaUvj6CSZC0uQhH8PTkJo56WoMRSL6TNVIOtzRrK9O0qJjw92qBk59nubJTZU10P3QOVBwrMwCDzDftIRJmxe7OENuM9iw7JdWetm3A2YucR1mJ4NHQjLau8+EhlfWoj4CdOkgMyYTtU2YZFdP7QXZZ3qqCJl26EgRdFJKzcDqSLMdKLPPftYGqRREfKUounHgnbgxZd9Rp5Tp0lzg1Fe371KllBlGp6Q5bLgKo3cfU4aw1h6osj9gWZIDdkNOLjKKMI6dLBPj2MMssnnIRdkxbD0Bku45L05oSpnpBX0BhIIuJVfVJXVLKnF+Qus9ipd7LWR1L3uR4nM3eEsqLspiSpgOrBlTho/uzXz9b3+W9Zf/iE9/4Su0v/+zfP28eZoO5sYvAcyllEBGaAqSW72l5AAdw7cgYbWuKaFMeHpSDy6+xbrTD4Oj/n45JPUxynSwG4m0Npq5fDwBQ109SISC9KGnXfzGLB0S4SfuKRvAZiH/P+y9269l2XXe9xtzzrX2OVXd7CvJ5k0iKVFUWrQky5Jhw0gAX2MZtgMkDmAhQPxgwHnIgw0ECOz/IHmJYwOBkSBBkIcgNzuGDT9IcGTByAURJFmyLJKiSDVFsqluks2uvlWdvdacc4w8fGPtKjPdtihR7iLdCyh0nX1On9prr7XmHOMb36WaGI4udHqpK33EA5+xqOMjH8ZiUFpyUszS48LE8mtGxVLPYVSbuSBPYhqW2gV3tSN4FSuR5G3UtC0bTnXRr2tRC9OyLbBWBaaOjlNpVM5jZ22Ku+9jYOvDzhhEvd6DPns97acp2q1bWVKZJpZbLQtkvFQpyhwA0UGjh9x9PI1DiwhI+lVqFSIahYH55OrqdClZlWRcGD7Uh6+LSursWUut6TmwJDqtIMva8ma2oEwUVW275splyfcsC7UWRnVoJWPIMWYf1GLE3llrw4vakaWeCLoy+bSnsrRFZfui8t1sMoezrOt99qCJ8lpJheEBHDmcWpOY6Ni1M4TBIsHKZENSNFZbIyiuDWgJeOF245Ef+Qgf+cfP8fgnf4Onft+HeDl1DFac4todZU4qnoOCPRYY2on1aeVD1EQaCldohuXFqlYTHDwCVmRxJuOUQwGJMIhml1IYnyylZNQ9tFphpF9lEoAi1K5pgy+6LsVoBZppb3UXE8sQXuVMhgtEPByNSmjaUUvIPr2Igi60vv5z59ta1cYROdJkii9QjZhkdVoZw/Net9wjhG3gjjXhCBFBlEWsxxl4dJoXLJw+g1ZXtj40Vjb757Q133g8FIsAiJgxMxTjMAMlSPHJPHxlxLXPeXggDbm5CDNjQ66xVhn3tIjUWbApQkYpmu+TbDnDuFqVAGxF04WDXXXfvSioFD14ERJimMrwGenbN4XeljY5rdIv+pDRSaDEm1oy337MC6ff3LCZGgFPuh6gfjZULqZOtbYmuqiSQmUlZkUPbYT65Ji5UybgmGQSRb5HphKphDXELMRCHHqr2GLsY9daU9LpZg6WVcPz3oJlM+xW4zfe23nXx57kez/3MrdOX+MXf/QZqeFmph5Hjr2m5vCeI7Y5ZXFWK0nVzXOOQ0dPmoZma5Kcd33skc7L2TdPlw6gNiwGtWV2IBlOOxMXmIO1yrjAZaVA98GKuPhBoS2NpRotVYK15OjOYV1O6qirqqVz73ir7OMetSi16Pq0ZPDn1GKY6ESpzpJt25y7JhvDqStpUiJOBFUagrYYNoAm2nIN8TtWywlB0T1FIFIaQZ1JOgpgyEQX0zvo2xCX5EisfZPjoVkEztumlbIgp5iZ8c5hLGuGM9SSklC7rIBigGk/jRnEdqDS6crbdSNaOHucOZ2q6Js2L2IiT4ZXbssCIGcXr7xU9d5jpq9eZYzJmBKi9M4lhnvibPtd1nYl+m4Rq7EBzMC6LnzJfrjUxuhT2oBSKQkoYbIYnxOYcrnxTBw5jDKOxbKm1bVdgK2SNZEMVmpaqSvQFChVi4PlDDqCxRIEBeEU88ixU8JwhKLLolaKOSuN12+v/NqPvZ/la3f4nk9/jXtPL3zy408yWFjG1Nx9Rv5bh7JQD7MzJaaanRrGktTXwyPCBSiIgFTkg+ih6UKtjTFyQ7BkLKLxnDmUpeI+qLZQveRnppan57QAjMUbTKdGxdHuvdQmcDG00dTTA+pTc0g571qMvk9q6HqsSxXy74O2NMbYIUTeWtcFxiAKxBQWYlUEKGENTfH1XYCoe+HqJFLYUtRKUBDcmWCg5+h1Uqgjr30k9Jdjzt4nfWy0RVT08i/w/HkoFoEIWOoK5ow+aRqiQ97Inmk5AzImWhOEwOi7UmB8Dlleb4ZN5cGHgR+WZUUNgzz4Tewv0tEm7nPCj1lwKyu7nhqZcNTKnDsgizFzJQC3C9os+7LjWrUaeJ+YF2rTjm0TWjWZTkS6Eg9ZhLUGa+UBM86JlbTcnpNqBTsiycJYSrs4Aim1OEeZ6By48NYFvAkw6kSU5MWXnHCUiwWbZt5QrAGTvSvIMqYWjCCw6woxuLbCPMH2hz/BV//hr/DuX3qe9z51zctPFTx7VqX2SlykPjqFUEV1nVykVdXMMe9fa8olwagWtUptWQU2TlUIHsZSKzUKXkUbXqwyfChNKH0D5+icrq8YXaR+BZggfn9VLJ2TnIpUlh4F2RFNZiC/RJ8p6grWUwVblUdJpDGtlJJ1WURMdLUaa2tM/GKm6+60Km8G+TqIbTgnlDrw2FjsGstFNGY+4K6qwZZKn5IUa8HPvMuDwThCgLMZR1afj4e8EjiCNXPPlHxzHhchmZ5mxJDrTDAS0dfNve03wMKQYpUyGjbtgsqahW6OqpYjJzr6ftXOiaWL7OhUGvsmj8FQ04ytQCzMPahlxc2VsVe5IMYMlYLeN9ZTqujGwFwRVsZUH4u0DXsfShrCia6SvKEbLiG+9DtIsswQvVZbqhB+d+3ko8R9b0HEeLOSLYzBlvFhzUrGaEP2IpgFJQqMfklB2qeqoLUUdnPmmCwubjwxuEbtxq88EXzi3/4BPvL3f4Uf+Mlf42s//nv4zFMLtTQ5Bx/tyJRhifeUFfuRrDwlSMoFgBma0wMnu5/+R06PNCfISPAQBtNqDgYLXLWVObsi09Fn1/fOmuEnoyY2UOX643llZCV3iIEO/kQ6TlnNHRwsdmpVyX06rRQ8pyAlkXonTOQuimF93MelmuEu/GFJAlBrlT6RwYwVIjoKOBkKQvFjVEwqGY3dA0xt7uydq3qMgh0bzlU7cXOz04qMca0WLNOY3ux4KBaBiBDxxlG/bkfUst/XqaOebo4pMUpV5oAQ9HqxuR5dXPY4ymILAlk1bRnR7GrBaNYY7tSl5rjY0q/Q8aG+frpEO1OulxmGYRCFaiKSRDHaWlMqOmjtRDGV9gWjlEMO5ThD+MUU7VXOygoAqXPKIPNI6inG6LtWrPxcmKk3LBLLtORXHPJpFa2y3BZB537rUAyGDaLL4baka5JZUIoT1AsIui41rcSkfKQY1YMyJi4iA8WMx+KK50+T63//x3j6f/1ZnvipX+Q9/+7v5zcfTYlz4ioYXK0LVhWi2tMwBAp9qtVxzyRjggUSSJXXwbQpuXJC+U7kZ5BiqlDU+VKN3SLLcy249bQw5mBBY7pwUyXQRJUm++7wkV6JKqGjFMwzi9AEsJWoounkfVCspkdi8gAymsyKKsWLjyHASE9IBDZaFcGoWJq91kYpxrpCq4NqV6pcwuHU8N218FviZiOUbxBTKcYIY/EOp7oSc8e3SeyHz8GbH2/NIPhXeHioXJkj8mFO7Xa5P/qS3XP2i4bSaCFLyc6cG+47MHDfZeVtQ5qAEtT0niuHkWX2mO5NPIRUK1bTvN1soZZFs/dQ0Gj6ll/ouDKhkMFF+KRkzyivg0Etg6UOCjv4Di6/6bCj594hdsY8E0z20RnpDGslFZCKzBWvAEuSjaYgS63YDE5VysdmYhGY6eZTIlOShWYChdnvXuzMI402QnN4qyZEKjL6zAdhCtm0asRaWKs0ibUUYjGohRceLXzxmZV398r7/vGv8VgXl701JfqUKhMMWWjB0tSyxAwoxraLyVhNFYmZeuzeFSIS4SlbToozRyEvFZ9VAyZUWZaZOW2RgKxU51QbV+tKK411XSTnLsHaxEkRhhSsrWHhLFXq0rboczQf6Up0cBsNpQZPShXQOF3pTpHXqNXGRJ4Fx+es96/JAHSsTIpNSpmYDTlS1U6hs1T0oE+5YLtroRzDGSPS01D5A5F+DUzDKFRrHAa9JdRGvdXxUFQCRCgNqJS8ummqWYpOIA0zL4675ApaSzLcEtGD7LkKNjaVfDwQGuFTRJim8nxORTnHXi/AW+jtJPKcH5yLXVcTTFPghNJvvKjfpUiwEzHUI877Ao+ZY63ARfF0TwspVQRkQEYplTnEGZ9DBhY+MjH5sgMcIJBdxoFK71GPPMxZXdOO7pqWDJ8CpiKy1FTVFGEXwU2qkVRNKQMGs6oYrXRk0gKiT6k1JQKFT7xV7tjA/8zv5aV/9hIf+L8+S/97/5TX/uQP8qVrvzAUaxKHSigvoi0VZ9Ci0ItAtjknp1LwPilrpaZXIaUyI6cqJEgsqSAVKSejWJa+SThrh4eg3IawkHU3MjqxlGjvfcosxU7gzq1b1/Sxi+eAxGFjqCrSI34sSpAAC6UqEs9zFqegUzI7IX/e0qGGw/JupkRexqK1GrdPFYuN2gLiTIlVmI0HNrUgWFZNPguxpaDKDYvJQgFPp6iQPbnjF4zlzY5/aSVgZh83s1964M9rZvZXzOxJM/uHZvbZ/O8T+fNmZn/TzD5nZr9sZj/yW1gDmHOw75sekAy1cB8XIYwMNCNL6ZG+ayMtqye1amWtdVKrM8YN+3aXOTtjdI7MQYErBxCoxWc7D/ruzAF9c8Whz8D7UA/rAT2z4nOm7q73cexMEfpaWFcgm+qJj87SAmJjTv3p44aILqaaZTsQIsj0sbH3nd47Mx2W5ww561jQw+nov4eCzvNe9ClUvjiYy6lppGcAU2CgFGswprjoY+/QnRYyHGGYLM6PiQsaXYWTLVFWTaG2qg2Zd5RpvNyMf/KJJ/ni73s/H35pcPsnf4nHZjBiKC/PtOvXpUirX1IrUVzxZekTcfHVG84M2HxeItTcZEJ7GISqq3esZXRYCda1pSYkEogMygnqWliacXW1qFKrAQzWZPMZzroU8M7ajKUFhUGrruzZkgrQtGs/wl+xY1G8Hw8npaRzpE4f1uqlWla4Ig8tS6GUya2ryu1bjavVWVenlcBMD68PVyvhTnFgKKXLd5g96JscjvsGcwvG1pMv40pd2pwyfweLQER8JiJ+OCJ+GPh9yDz07yLb8Z+OiI8BP839LIIHY8j+Eooh+5f9G6oEsiw7rWvOtUuO6oLI2K37zsLHvNg5jBRbK+x7Z9/OHIGk+9Yvq7Pj+VAN+q7024OD7S403H3KiEJbh9iD6WVgrgeWbE8Or76ISFJGyaQfVSVzCBzqYyQl9Ijcqhpx5v8rBlu2I0UkJ6uaSvShBa+1ytY7fQ66T0lOi2mEd2zRB4KfO5RfgDwRpXym7DXu/3vHolHcaFMeftGFSh83nFFYShNjMhe+OSbDnXtIU3FTgAHDjc9//GleeKTw7MvG93zxHk/cuq1qZap90oIukxeJgUQPN4Leu/wE0UJz3gelrVqMStHOGpE7+2UjThxJLZonS/BoJw8aesTIdJ+R2Ic0JFiwtJK5iHHJEJRxKlAOc5ZgvVrT18Gyf2+sa8vxco4VTFp/GdiITlyKCESHrwMHiBuyZ2tNGNBxLsfjWazkdKASI+j3dsqs+GbYKPr7gHGW54J3lEGxTwWt9pC0fn7rGIN/FPj1iPjCtzqGjCjCBUz+9MUyHSZS6+5TjkLJ2bYkstRUoR0RUZqvT/q+5wWZrGUlehfhJtR3WsB23qjC2tAI64goV2twoW+aRluR9l5Hd0fTjeFjh0RozY393pmyaARXU5/Qh6emP3ezed8x2UzUzlYq2+gsrTDOZ/XToeqn965Zdag07MU52ZrjOLg44QoSZ/pgJmElXGBYquhlrV7TMAVYlgWbE7dCs+UyfRlzSohSLCc2qjTGtisNundGFAWg+mC6MZbK+fYVd/70D+H/x6/w4Z/5LG98+os88kc+wdcWBXaE6XqpNFfLdt5HFvqqdLZ9CHtYRaI6rU0VQii9SLwCPdTCDEQsa1aIMvEY2p1NbkBUkZZmypNrM40Ds5ULOXcxp0r7kZoLLfa5qFR5F4qSLe5IscqS1l+1VI1VMw4dDsGS0cfBcXCWWiV1blDTOaoVY6QKUSlIR2vrtDipHUBF6TjrvRISWZkXxgxubnaWEAXdiox5jYMn89aP3je7CPx54H/Kv3/LYsiASxBlL1BmuSj1NNwfEpSYbpOWK7gVcc8lt0zgigDXjaEoac2K18UJNuq60rFkGga0hvGAyzDZC8trNncuEmzJ5J+iUd2xOMzS0kNObYIyE5Uw0rPSkE9/UmmLHoZaMnHWyR1aI/WtB81CbVHJOb8ZJNqvxaGyZyCHVcuq4qCHljQIkT/dzMpmrWsyKwNbtBh6c3zmTopi0lfTbnI4LRcXCKfqqEI0xcajEd6YGm92S0DB4EuPFt748U8QP/VJvv/Fe3zl7/4C9U/9EC88fc3wwVVM3vBBjRxqrgkQb0Oei1EYFlyXKlm5HwxHcrFvWRGozGmLdnIryhcQ+AkX5oTLWLbU+/N/0jpeASpThrNIbFRMvIAw0b1L1WKyLOV+lHlrhHdI96E+p0aSvROYRpfHhMKcbc4LM/U++UftCD5ZWxrZRKEH4E6zDFPxhbEviWsY9E4ZI+32nRgwplHScGRWxbeX5GcINH/z47c8HcjMgT8L/G/f+L34xuTM39rv+0tm9vNm9vP7+Ya+DyIcH87NvTM35zPbGNycd859Z0TkzZw9eY6+sIwhJ+h9MLZNiLKrZA2XaGTbdrZ9su2TvU+2beAYNzf3BFZp4K+Fw6A1oxpUm9SYNIKWu5Z2nHoxF6nWKGmGAhIdjRGMKZ34vk8ivQ9Hd/ZtptX2UaKTsWr6GriYXMwcn+5j5DzaLkYp4Inma4IQ6EEaQzqIbe/qq6dzWk5qiyKSpozOF8OjMDyYoV1IRi7JKRBgI0OPMIGkqcs//hQC944xaAWurHDT4M6jja//iR/guWt4/13jyf/zV3nX1vEi1vxVl2S7oHARplFzXzI7LOUqrVaul4XVCqdaWJd22ZlLKRd8YLoLBI3jjxY1mA/oI4K+78zR7/8MM92lJM82iwcAReUTjj60sKLWzEqhtEZdTwTCWOZ09jGJ0i6tHKZ0oUBW8BciV9K4W2kYKV4qlgQiLU6aeuUkaQ/KNOoszHuTNcNX5z6IY/A0jPPNRp8DQnXfTLyEt+4GvqlK4MeBfxIRX8mvv2UxZO964ukA2LZOS1ttxUlV9rmzLieReGplXYzzdK6uF8YIyGThMcclQaik0CQ0HcvdXFHc/aZDgXVdNGZbVnzK/vn6dIt97AKoTCIOIazSAwCUUFmpKlJ01sBFWU6Hnkikru9JanKl8FjIM3HJ6YRunp5lXlpLF+nHS5U5aCASiXj0QoU194/EQlTie8DeRWfezp1qEiuNlAdv566aN1TjeAtin6x+wqtwkNNa5cBbxLwzHhglznlMSC/gqDZaXa9q+pzwQZ1iYzrBi7cbN//ejzI++1W+/+dewP7RZ3jk3/o+nnuXUbuSmHYLrJ4wP+M5dzec0yp5d2uVhmFLVXQYOTsPuSaTpbRRqUU+AELM4yIXjyEkfk7x7keX6GtpVVjN0U7lO9c9mpbnub1psmKJN4g+Dk4U7f7b3hmz4HSqAa0wYxBTFnC7J6ZVclAwnajjwocJ9yS8rfh2mOUKdPQZxF7w2TVpMVXCtomvIHPeTqDU7tkKDS36+9hy+vXmxzezCPwE91sBUNzYX+BbFEM2p27281mJQ2rIJm6wb/d0U1eV91enprDFyHirqTraCYhCq3K3IeQKG4xcWNKHrhn7eVNT5ka0hZXgPG7uO8eGZwIutOylS8ledAyWlqmzLmRquNKB3Z0Yh912EUMxb6A+Jz6LHGXNWZbckYFWFhZrEpdoO8qxUhZrWd621KzfXwAyio0QAWmI/zDRArnWJZV3WiREGqrU6XgMZhR608663dtk2BJdmMahw89xZniwD8VxT9RXkyy5kthGFOONZlz3ECc7Cq+fFs7PPsMtL3z4//0ST33pFzj9mWd57smFHWNPBaEViFLwPnKcqAVsqXr4W1HJP6fYkVtPHkXo828mUJMlFYRWc5Q201pdD4WowAJlx9Q5ug9x+DNr8RhRK+VX5b+XJJ6hlmTgUhduO3gw+wEwd2pTwlJdV1V5Ppg9Wx4PYk1Hoh60Kj/BsTkjVwg5Zume3vfO6CENzW4YC/MYzw7SeHXgsVNb4mX9TCwL5L2rSdabH7+lRcDMbgN/HPiPHnj5P+NbFEMGmlmPOViqrJS2LgBmT098D2i3svTqnfBBa9rFIxA1dNGcV6WcwKKZLC11sBVLJ5tSCpbz8jk7g0bJ+b007yIimRnDjIhJdaCWy25dS00CiTgH2kSEN/jQyhtYrsKWHgHi4pelsm07eOd0UsLszOnHUjXbP+IWagZ5xEwySqgkVbVzjBGdidGnxCOqiGCE+PEYOIU+kviSIpZjtIk5ZN9dGxpNxRHdnTyMHPFFcuJ9TGqVF0CYHHMOtR+lMJou3BrwKsYX/41neOULX+ZDL97wzE99itf/1LN85fYqZaO7ZtzVwJMF4Q5zMkIPQE+wrvd5CRP1kBDnGM0eDMkHcyfdFa92xNI9yJUY8/6EZh9D7ZhpFHjJuYygtqZQkKNcR+akI6u97WZjdlVkh5MTS+Pe3XssLacHCK/Q+C+kk6kKcLl4Pbg+5z6dHp3T0pKnceLmfMOcBaew90EJ2caLeD7Z+g1XYWxh3L69Jl5xTKN+h4tARNwFnvqG177OtyiGLAj2vtNaYx+dfdsAlfRjaPZurTF2McdtqULYhzOz5yUK532yoCy4UptK+CoEmhlCpQksyT6S35pAl1Bs17o0xj4StSVrQXn3RxKDapJGpjv7zB45b6SRFNgS2o1LKXrvXbr40dXm+Jbz5apgi1otAUjLklUKs8tI1EUYYirBZ3aNDhXl7nTXf7d7QukBCrI/I+6TkUaGvY5tE4JcJ80aVgrLanTv1AlLAm2HLFm+BQIpZQuW8WemEaVktALZlih4C8pMQ5Y5aGvhpdF5+U/9AMvLzod/8tM8+w8+zRMffy+ffPYpbhzOLq3EYiH5rTXGesJ80qelClI9+r29Z/KRhFZ9dJYI5FEiooFl+vB27sQyVD3aChzENLEM4hLaWVNMFWw+lGUxQ5XGcIiF0SdRClEKc9/U4rtDNCI604/wUfT7o7FNY4mg1EnJWLM+giV1Az5VRU1f2TbRzfsQr2IbhdN6Yu5nmthJTCrdB310VWfbLqsyBpVKrSt91/1cixMM4ndaCfxuH4b6Vx+Rs/KaH6azlHLJ0VMJZ0naEXU48iGoiXHGQRCpBffOJVM6y7+21CSS+IUByPE7aqP3kaXzSLOJ/OBTyGERbEMWWWNILIIhfALRYj0EyHgiwOFDYyyrKadNeytSNEN+PU0e/hNIBx0z+euHXqKGMVAPOZiyWCtSJO59JiiYPAALbB6jLui90/dx4SfMPvDi0jsUo52Nq+uF67WmGej9Cc2h4Qg9E4lvHfOBnFrklKImCHWYmcw5uBqFN0qAFf7ZE8Frf/ijfPQff46P/srznF59g0/+4DN4qdhcubtOtgqnCVdn50ZLrro/8+RzqJKpJZS4E2C5i6q1F54jbklhdP03cge2lCAXK/dpyQQ+Ip2WSmIy6WyUtveeJjJRCr2TuYTKDBh4Ep50eBdPZO7KMzi4DCTXZHrBd5hFOiAAACAASURBVBnCjJw4BJXdx0WEVOYGVjgVTcbwAG/gg36zMebUZjg72KTTMJylLngPrHnaxG1v+fw9FItAJEnEqMfzSvGiOzck3cTzIkxjFpVs5SjTq8FQX+dWssxtaT2t/k/mpEcJ2IHASkvLcfV/h+msysF8LXKxcRd+gJxvRgjpjyIXnYOVORPd1y2R0lnU3x72aZEI/aFCNrMkklRdTESgod7v/48x5bKIWTeCC+Lbd3kBxDSIdO8duYNnOW+Wve3xmWsYwbYPLJSQc70ubOcdBlxdyxG3Npm2SLcfl9ZG6GSO61yCJHcFp9R8CjwEVM509InQYrlG5UtPXtH/2Pfy3f/P5/jQZ15imvHZ73mCF59IH4Bd9tz3XJ6HfWS1VYt+Z6SUIBdJSpFdG0LC+z5ZFrWZczhW07V6ynknZqSvpbCCYFDrKuVeWoaN3HjUCemkxDZVvz+7rmwfKrmPRCc8r/Mc1FWZEFZLpjNFEs4qHnIRillykiVB1MCIopbKQq7Jpa0Ul3J1xmS7OTN7MPbJvndNs6oxtk7BmbPQQ4QuTJmQb3U8FIvAhTDTR/btRxcaqaarHCkqNQnoPp2w+/r+tS34COn2zYQZ1GPSbZff9WBPCHaRvJJWX9rNxTn3ofy+4ZNWFqAwh1BcxWzp5yMcUcs1ljEztuHJNKsC6YrwicidhziIJJlxF7nrmnYncQu6EpRY2PeOzcD7QV5SGz9CPoxjTHqKSTwrJT2nujn0SXg6EQn7qKkaPJiYoyq4ohYtZrXkOpPR4hHCJQJ0o880OUErdzNJZIs5Y6jfjVKZ3tmBes/prXBnDq698NytE1/9Nz/Ox37pRb7n86/y/hdu+NTH7/HpD7yLe1eF18O52lDvT9G4y2eO0CCqUUh3J5cpqiXYVorJTSf0AEyXx6OHTGXncInHiujJpVS2m12W9NU41cbM4JHaJN2uxWhXJ6bD3gPWws3NmTGULDSnXJStwClDXwzLeL0UTwVEaQLAKZgf4aiqOCOG7q3MHzDTYnXs9OoOK31seBdlu5kqCpMLKfs22E8GzWihNng+7AKiSIDDXQSN1oRqFmCtldKqHsKSwZo1+9HkjTerF1GO0ZSyk9FTZhWPcRl1HRJly9GROyKCRLCWmv4A6vNLqWx9w2jc9E3UTXRRKCU18EqxnQ/oHDx5C1YK56E+17L8Nw2FpRPoU5TTIKuAiWH0rn60FF3QcNckYB6ot5BymXp6UnhFpd3HLhtrFxmm5oJaavoguqYeomTDaqbIt1oYfaOtlfOmVGEroi63I1Y8l2YPTVtkwa2qoIRwjYqqH4ole27VAhnBTY4lbw3oFfo2eakufPX7382rTzzKBz77FX74l17i6tW7fOXD7+Y3Hj0l/8FxOwQxMqA9mr++y4pMzD89bFYOPCbvr2mM9JCcY0AYW3ctqGky2hPIPceZq9MVpTsWTltPsi9z8f+Jkcapqt58Oq02+hbMrUvCXgJfZVohsdMiMBAJuhSZvhChRcGyTRxDeoaL4i8CGY4YVPEFPNRmXl+vvLbd0H1QS8u8x8liK8WCGC7BWZFcW4vMmx8PzSJQqgxD6uEsXFrehJ0l47LDp8w6SrnsmuLxa0FYmhKCjtw1+QEeK+Ch/jr8CXNUYyKSKNhEGMSxYMwHSvE5nbKc2M/nlPkKST6YfJjJtThDMnxoB6aadOZdWvnpEnW0UjGrSuCtNVdqFes+ZUmt9646+vCiq8dusahnNYtLP2sHg9HuJzc5LjeaKvORiKl8u2MHd0WVHefqUxqOPhzOQ4EsrhFbrfl7i1gTcwRRQuPGTA2ePpPHIF6GD09cQOy+7rqO2qWNcd7pDr/8eOVrn3gP6z99iY8+/waPfm0nfvADPPcElFZYUEntWXW4TyzZol6zvdk7tIa7LOCNQneNAPF0s+6hns/zwR/OuiyUUlWJmshH3XUPjl2J0y2xnFY16i1FFWstlnwBnZ9o0XIyvqoyL12qvCcCkd08CjNjyI97t7WWLcjMjIvUgOBQNAqnpvQ6yUxSIQLJeF1rpVa4ujqxpAgJSwzKH/JKAJIxZfP+OCqCGhIFVTRLLaXmM5104nSJnaj/bcXSD6DkOEeCFisFeTPqoZqezy3ZYixLLiqRO4LexXQRZKbLcGPbO/tMWWZOAgpNrjsnzdrn0Hiy1kVyZ8QFiKH/J/rEp4JPW23UUunboKatuYDCbEySXFJswXIHHPvIUNQpApJwTaoZffYctwV97Hg+JGZyve1TzLh6JV98DbKVOrS0lkavKkt79ySjqCytS2V0lxBqz2TmWtnPZ7Ht9sE0jQevqmGlpVCrQxQsKt53cGMfwX6jRYIMIrlXK1++1fhHP/wMH3/hdb7/+df4Q7/wPE9+1yP8xgcf4ytPXnMiWPKz34t082PImNSmQTlMQhbi+HxK0fet5hrbGGMmx2Mw+1SbNSe2KqHJp6zimnXWtVKjEVXThmOpPlKTmimgFJfZa+9OaYWJMVwTGkNVkofGxD4jgWy1fWvGrkUxmKpMVdEYy0m4FTEU0hoyVzEmy2mh7gpNPS2V07JwujLWpeAMxb2nJ+ZFk/Qmx0OxCFiOdVqrYkwV5deXkim2BgdZxUo61KaoBZMTTSnGmh7+xGRdJao4XHkDy7ASIPl/EZOFinfZUdWmG0QTCCXLzBn0JJQEie5SL0ISd+X++cyS1GSmYYQ+XJfR5e7O7lNpP6FASitFvoQmELTVSu9CmrvbxSR0oaRfvnzsI3QDRgTmOYUojdYKvg32bc9pwMC9YqYR2OlKVZa7s64i7Foq5foQdyB8EGUVijKCUVF5WY1t31nWVR4HVbyO1k5svVOXyvksCfisaKw3hlSMc2I+uVUqb7j697tbJ9Jm7GoGtlZuqtOvF24++DTPPXOLH/zsl/nRz77GR55/nU997N289F2PceeWHpS6FTY3Xtt26qzE7swY+FJZTCDw0uql4mspCop0ZC5RKC5SlkaHlXEeRDW6iSYdJhfsfd+pbSGqWkAsnaampkjhh716obUkjtUTqiaVoHxEyJml5FizIWqVw3BEpQTsfpDUVMWuhdQ7JBhssjhvBvUkW7lbbeX2qfH4o7e5rq7qr5648c5gsrXCOf7/z91xPCSLgMCXfXOh+Dl7Z4ql5QbFM2PNUPlVixxmS4EhMslRRFTum2+2JuWWZswlySzH1FBcbaZLQushoHB4OtpmLx5crKqsyKewtpazMvkXmh+yWCDL9JlJsX2MNOxQQASQs+cNL+pzjxlCkDT64WmlPbEWunk1cUuRksg6mJx2x9ggZMLR2pJMuHJx7hGYmizE8BQvHS60dgwp1ee6rN+Xdp0TBaUcqULolNr0TkMLzRyD3jRJ6Ol6Y8DowYxOM6NMmAxiWlqll4sX/jyqvWGs7pwX486p8cb3vY/t6jW+//k3+P2//BJfeGPj+e99jC8+cZvXOmL3RZGfnleCysypy7JULOTMjBtp7SiJtOXI2RPYNE2e1FIVtn0XvrBokSdg7BulFGpbubl3IzLXlKjM5PApE5M+ks058RLAKjZfJhQFRjM5aIfvrGsT1dmVlrxeyEhwOjWWpUB1qIV+VgU2x+TW7SvmDmVdOBV41+2V6yW4XYyohd2mWlKkim3X61s+fw/JIiAf+mVt9N3TDSXFITHBUR5c3jW1KZZsuhx9FeFU5D8X2SFFZCVwEHlIeWdAFPCcIoyDTeYM12ho34Sm9im++fApVlyo5/P0nOtdbD3QOCyEzoDvtEXgUUyNaKbIbzn/9wuwWYvlXD1HbySmEUKCF1soJKmImf+exl7qKx032XbPgLn7RYwT0y6lLTaV11gCa5IRh6P+FVS+j5HGWRNrmWufrVMke/KIL7vUl8mqO98oQvx+1am/uU6IllMcnxJUVYfmWeU06fnxSW0L03YqC6/Uyv/94cqvve8RPvHCa3zgy6/yXS/e5ekPPcqvfvTdPD/P1CGRT5fLDK2sIulMoCi9JzhQdZGbSiYHLY0cswjYXZaGEaztFlsf2qWrsTY4tQRhe89F2/K+SN2HabHIeAOFgbSFOTdtUAdQ7YOrRYs7DhaqJBZrui8XYQatNZbmIvuYM0JArbvs2cz3bBWMq9q4WuGqwVIML+Cl0kxZhdetJXP0zY+HYhEAshSeLMvKvo3UpagkBTj7pBX17T5z3l1ya2wqoz3uA4Ji77laBkRzPXjzkcg/OCUErFnA8IHPybaPBBzrZe4/s6865uu9d5WCOftfF7USc3aWpTHrIGb68M0JpmDVfVPJXGtlKQqsrLXgset918LcMqwEY/SNBSUfT+OSQGs5urxqa048Ru5yjekbY+v4ngueuliJVALmNljLSquFQeSIcl7kw0srrE19dWRu4KFVcA75rXwGCrAkn2H0+4YqNbMkFZeeT4YNzILTIlb8Lqokbe5c5648SjBsxeZGOwV3qzEffxf9qWvufLTzzK++wA987hWe+OLLfPn9T/LztxbGcsUeyOzVNe83U6t0WJptPpUrGFAW7b6LtfRWXJiugZ6sz+VkvS6NdSmc1kKraruKifJbitKjbVFFsyya6TezVBdosW+nBhYaM9cmUZr3yyhRAGqFYpQZTBPnYl0rlU4tMBD5KyJVpjFYLq1psJySbl1hmBSojkBosCS9vfWj/lAsAodvXiuFfR+M6ReXWTNLYCMkavGSJ0f234UxtNv5kPioLo0ZTk/jx6WU9ChUfyvSyGCtazJIjBGDvQuZJwrnMVjMdBHGjlXRiGupbH0nrKb0Vgj7+SAgWWBlyuyhZsvgItVMH+LeB8SYRHOE8UOrJ5yg9zRGidQupJVXn4c9eC5MyfOfCYqFO2LEGMyCz3TmJb0GTEBVKwWqLMLOU2Qnj8BmGnNUed7NEbRVi6xRMFs4/PGlUKxppZ1IdWYrhh0chWCppl0XcipTMRMjs6bkWM6+eijDglKDUwU2uTzctkIL596V8dyjJ15+9AOcf/0OH37udZ75/Mu899Erfu6x4PlHrnjtShnBayiXMmaneWUUNEkJqPk5F4e2aIGWqUfFqqWtnUOT/XddVwY9z1XX8tRMtNwabFPTi8oJS99L6LJSS0BbBo+q7lopLMuqCqo7s1QGll6TJAlkEDEoKwIXS6MF+CVYNXUaoYpyFugYZ9M0IsI4bxv7jGR3xkX2/mbHQ7EIHPTZOVPQMWWe6aYdu6b9094n02XoOMXMIPqkNkfyGaO1Aogwc8yUswlgzWLX9B8ievoOSB23dRFv/CDamGd5J48AbJUSj5b6e/n1GSWNLgptUUpurQL2LEHMGs5NBpNKoutchpc5TTh6dVCbYaHFbe8Zp+VTa1agxaTkjeACi3yoLN+2nn6AZMVzuAqRLjv5oGagRom4iGWK6cYxCz3IxVjFdaZExn4ZBJ1SGmuReGj4YFlWxuzMpt1s+uBUpdQspmvbSoGSPI0qEk7xmtwLA5Ol1nq6//m7T6ItDIeXb1deefYZvvDMUzz2pdf56Auv8+986SVeu6r8/Lvfxa89fps32qCNFTvd4sYmxZMm7HBqKpPtSFQq4jlYTfZpK0BlccsMyUHLElCMBfH/FxsMNP6bM1gquMmVKMzSqUMp2Gtal7VqrHXRyNeMWE4KJZmBFwHLYXEhsgEsh4Zl6EHuu0awHlBNWZt9dMoK97r0Jn14tnCVKBorytD0zY+HYhEQIBWAPqiZoMYE3ByvaUHeYPdBmUL2JasN2Aenq5VajO3eDVfrigjvQV1zpy2FxZoWl5wqHCPDvcM+jTfu9RzjONfLAqXS56YcA0eefh70vTNCi9HYd6UTubjy2z5YV/XcHkZxY22V85ysS2NOCYQ8b3g4LNCHYs7aCfbJvXv3qLUpIbg2bm76JbFmWRaKKfRiXVo6FQ1maETl0zhidC5R2ol7WCksRSrH8PRYOIhADqUtTDq1NmJ2VRcuHQUBWKh3LjqvmmSrUxNzb60LXnL2fbpK6UZm+lWjhHwNPWncWvz1kJbMnTytjVNr7H5DU0oqtTujKtMQKl96l/HZ73mSX37smt9z53W+78XX+RNfusOPfu0On3/6cT71gdu8FieuWWT84RNf9BiXAGowbKKkdk+AVXz9lr4BlaBZuzA0hweEOArFCiUcfKYkPLi52VjaCktNXYMmVzWp1C2nPdUqI6AH1LoyYiNCkeTb+YZoIjuJUehqFZIgVk2bAug5ocBV8k2smHiVEcwBaaaBL005kW9xPByLgMPoppOzIiWe1wvSPsfE0tZJDDKhz33vlMwKvDnv8o9HfXs1raKYSDoViNlZaqOnEIQonLfBeTh7RxOBpCeXMLZt16IUovvK4qzqARnjIheWjRn0c5fKrcIsBVsOok96E0aKcHJsBRkpfennjZ7Tg7Y09vMUuabKITkiLbZcHLn1Sij94cA8u5iC+y4vwFYFSJqJXnzw2scUB50ZqlKzfDeTOUVbK+fzWUIiD2axC9uxFLiIdLIisSx9S4KvtWasnKctPDkhAZojgMvIWbrAxshzsloJtFDXdAC20pi3ILqSd8PAa2C3C/sOn7l6lC+89zbf8+XX+MEXd37gN1/no195g8987xN8+T23OBOcW+AnEcKuo8mYo4k2Ha7RbnBQddH0yeBij2JKgPbLLi0WojQAkg6vi8DbmmE4kjJoonUU4x6eduSNUxN5qzI1bp5TVnFz4KnCqk0ErqVoEZ2tse17jquNw/hFPBto4dq8bCZD0pXBaA99AhHMoQ9uTE/dfcpfs6fRpCaFLFm2nk5XaTZ5zbbdyAOuwD461+sisRawlkaNief0oCBAqO/ikm99cu/eTmGVmWYNtv2sqUFUraqlalfLXsEu3nECYGQxnT7+YjMzx2S9WvCQ39uEC005fMgwoneuTmlcWUxcBZ8Mv8lqReSaYk28eTNIo0tnUMsqH8GRoz7Xw17MklWGyDoXIREwnWjHzyjDYM4JVjiBUneiEEulj0ldjJnYXkRQcWEVc1DaojGn6WEppVIolFwAZNCqnbVg7Mng9Ly+M4FdElvRgglmTlmMpYqz4DOgndi62JJX++SWQ3/XbUZUXpnOP3vsUZ77rjMf/vo9PvrlO/zYp1/k93yucufx2/zmsx/kFTO+vlYolVkbGyj+rVpqA7R5aAqS17k2mPKUcGv0uWNUXYcys40CWyq1Lmm5oKe+mKjLBSNqthIyd8StcFWUWP3IqlBUrwWGsKyalWplodWJlYaVBja5d9OZofsgTL//lGI43Kmt0bvUptKplIsBzZsdD8ciAOwu7wA47LzVq2kJPW7WirnQ9NNqlOgs1aAG9XSi7zuVHLe4sy6V2+sCnu65w/EiGs+5uxhwofjmAPbZRQV241ZbxBTsrnZgTqbdJ4UUavr+i0MmM067PLhuk2FGb6HY9TlUnawF64GXlrZnI9WONUMjJ6e18MitK25uOvuN2JERLq2CGftw1qIRpCGkuYcRmg1xlcGYB+Mw0MPllgk2U0Qq9cND4ydTmwDG7DMZhBI7bSgXcM7BWit9y0mDBaWsyCVvMtDnKDcdOJVFxBdDBJvZqV7E18eIqrn3mA61ETWoyLFIpigHsw7KImT8yhbcDV9L+isUbMivAId717f49Luv+ML3Pc7HXhk8/rmv8L4X7/Khn/6n3H30xOceNe4++928fPuKu4/c4hWCfQ5OhfQwEILSFrWRNiU572WojWiFsQ9oi1SC1aAd4UgitBWrrMui0in5a9NDrkkpT29I1rw2WM3pZuwGrQQlP7e1QitQXNOriXO1NK5PK70LD1g4Up5EbBpujAEjjJsQ9tLHhtvpLZ+/h2IRAFI/UMHt4t1/GGrM6SytpQIu0WhTSu1pWdhiirzDQgzxvq0ctt5xP36r1gTxIkdBzr4PGdiMzOJLwY3PKXS96MNXP30w0OZlIK4SWr31IUpS/oB87eZ5Z5klZ84J/lajWWNOZSNi2okVZdbou5h259hZrxYy3yLBSnI8J06DJaGpWMuATpWfnvTayDbAfVJaueggLhbt+YyWRVRVD533dCf2Ic/HLpZhbSVHbQKrIgptQvcp/CAfTB/BWlV6C5XWh3WhhHuABSUfjGVZ5I7kfuHkt4ok5BztiioND1Rmt4Ihr34NeAIoon03Wap95kNX3PrAbe58fedDX3wVfuNFnn1x8tqrn+flRwovve9xHv/A47x8vbC1QomFWSu7d07J0ado40i2mdyRa6GYWJORY1bDaFa1Ggjp1oQgVaOGWqmS902g33NqC42MMyuNPfph26hI9arpgAXUKCwGV01+Am1VS1ESOCxAFE16SkCbhdk1udnird2GH55FQDA7kR9yQ1781YrGNjlCWRbL5BeHGuyxUy312wjl7WOysKjXRKITC2e4Mw323dNkQQKb2ho2VOIGgQ8Nhcpq7Nvg6nTS2DL7eRLsmvl3UIsiDMPYtwl1UkvhROYILgtRhliJ6fazVMuserj42KE0nhFx/9+rYv5N187okf51VZ73Elwdrrt6kFLUTLGDNtuYMdOwNEvenD3XKvZhtOQAZY8pcorqZKEtAkD3fVAXzeKZHSvO9IHvsj9vy4IvxjDx6H3fKdYIl6zXXQQYxXxllWea5LTWiOm0VcKlZkAxsiMDDks0GWpSF1F8Qx4N11ZZqdQVjSwLfPHJyteeuubqx97HUy+8zmM/9+u8/7Xgo3fuMD75Mm9cN778wXfx0kee5OVTobfKlvdTlSiF4eIdFJNpB+lRcPTlRMgRuZQMm9EC0F3uw3PIDoysyspSkz80GX3HlkwkzkWiLjUVoPrdNmEZqMJC3IZIAMwxSiviCBTZzp8NXo0QP8qMtX8bjAjXNSmapSiyyisle9oxJuuyEKZob6u6cdbTKo6/kVTjYO56iMKM7nBv7+KQh+Epn42A03piHzvLWrh33liXynkbmAvAoygks7bKlsEgh8Cn2P3EZE9gzA5DUA1ypV/3SWzCMmpdGN1zVOMauRVnMZNXf20ElT642JSXYvlvn6RNcBcv/yCOdGfbHbfCNmVJBXZRoQmU1NuSBZp+Z6ktjS2Eucx5uN2Kmk1IUNNctmqgkn3sAkaDqng2M3rpYKJMH9nLERunU3C11CQ7Oa0I2d+6Z2UVrFeLLMLNsKUk7gGrVaowVloTccesSAEIGYhynxhWTVoQM/BSiDWYfXJaFpxCrNB3p5fKnQ8+Tnnvj3A1nKfOztUvf573f3Xn2edexz97h5uTcfdUeOOZx/jSB9/FnVuNbThr02exdSn6WjtRomPWtClNp6RoaimVXRAHYLqvrDG7mJJmxjTZozsunYsLFLVSNUaNYE5jhFFdC39MxY1VmlykXfbzdrWIWt8Kp659qZbgcYK6T9bzxvX4NmAMyj4/8YApZZhYTvf72lwjGF0BDHsf2ulMyTGgPpkx6fuknkSQ8RQA1bLkAynWYLPGue9c31r0wA/dbJ6UWkwP5KllTl6A+or7MWTh2mm1u+tcEsu8uNYUVsboHJ7dZpEy0iqSU0j7vQ+TRVgPtsOrsNRcYDQfVgy5VGp+9NphkjbHwVZ7IKLt+HyLUcqSpiwJvh1tQimXEJRwIeIt8kHL6ibm4ZUwk7ItMlOvFWxCtQuvHYLzeVIff0QkqiYegZfCzZD+36ocn9ui1OLayiULQUCwS8zki0DCbO90bkfrpVl5qS0lziJvrV6pLozELbQL2gJeWFwWbVtsfOF2Y/zQB/nCcJ584TU+9OKZJ198hffswdOv3uG7n3udO4tz56kTb3zkPey18not3G2NWFVx9V2io1or/bzJGTlk+zYo7DPYu+zRijmnpVGLFJ21TU5rVVBNkyip1pXe9/uuVmOyT1Wy3mVDNiOp3KGJSsNoDuuEGZ1HOjx5d3D96pn163d530s33L638T+8xbP3UCwCZrL1NlNpO/Kmn6FJgcCjrptMPoxs9wa+lnygdIRHMrIWqkn0oo+o0JbKPjrmQSuqMtZWmF4U5412mPM9EUbGnrLaYnlxjnTj5C4kmBchIs/hWCsMAtYEztQeTuam8MnoIf7CUllroexngT67s83g5tzZzpNlbZd+XhNjkRtbacQ0psHNSEOL7vTcAQ7XHeUbqpLKSdXF9MRMbUytNQlP8hRspcr0sqmqEi6ifznCmCFQslbj3vlGvy9NWw9KtZn4+TadO1a4devE1o2GE9XZHLVu2+T6eqFGZQ1jcSB733L4MoRYiC3bFTV3KnczYEt0WiTZxoLFwGbQJ5xqy1YE9ghAdOxzDM4x8bva1V8q8OX33uZTT1xx9bHHudqdd7+28Z6vvM7Tdzsf+fLO6YufZ1RjX5W7uFV44/3vwZ9+hK9fGa+2ys0Cw5xmC71PztPorunTnB1fFuZVIfZdPIVT5byLcswAL2Kbuhs1oG8jE4wKbo24mRQLbnxnDWjFeWQffPCVwdOvD+594Te5td1wqxcen5Ld9zBeuGq8fPsWfP3Nn7+HYhEAkK2YxDP39y/nMNI7kokjUJ2YN+6FDfkAUMcBMhaN5eQPKGbf4Qh8RHIvtWC1QtGsniuj74c3PUdNd6lGDuFMyQfqwAcEZmier2pOWoPWmkQ44exTu9Wa2vIREkaNXVWCEmY1Otu3wyA0KL5zwGsWcqrRAx/scxelF40kNRLSQF9eeblDp9usFoSsZFJjoYpFgGdwH2izBzgZgdqrPic9k508r8el5UgAr1RRte/dvZEV+mmhhRjNbtDnoBSxAVsE7XRSC4dm4kzoGaNmrr8vRxuF1KVBrnGu8VdU+UoUC8I32dXfbLIZi4EPncsWXXTsWtm3Lk5VMbZN6dOvuTEKPPfEwvrEE5wCHo3Ck3fPPH7Peebljcdf33lkwjO/9hK3P/0VBrB74W4LXn105e5ivH7rxPnWLV6xrpi2brx8VRmnK7FQT4XFRK5aTlXGuEXBKsWDtk/aazdczUN7Yjz6ysatu4NbI3jiXnBrOOabWO4UfQAAA/tJREFUcKU5eOO6MWjsjz7CL94O7nzwMb5aCy8DvTT44ls8ewcC/3YeZvY68Jm3+338Lh1PAy+93W/id+F457y+/Y7vjoh3f+OLD0sl8JmI+NG3+038bhxm9vPfief2znl95xxvPTd453jneOf41+J4ZxF453jn+Nf8eFgWgf/m7X4Dv4vHd+q5vXNe3yHHQwEMvnO8c7xzvH3Hw1IJvHO8c7xzvE3HO4vAO8c7x7/mx9u+CJjZnzSzz5jZ58zsr77d7+ebOczsQ2b2M2b2KTP7pJn95Xz9STP7h2b22fzvE/m6mdnfzHP9ZTP7kbf3DP7Fh5lVM/tFM/sH+fVHzOxn8/3/L2a25uun/Ppz+f0Pv53v+192mNnjZva3zexXzezTZvYHv1Ou2W/neFsXAZM65b8Cfhx4FvgJM3v27XxP3+QxgP8kIp4F/gDwH+f7/6vAT0fEx4Cfzq9B5/mx/POXgL/1r/4tf1PHXwY+/cDX/znw1yPie4E7wF/M1/8icCdf/+v5cw/z8TeAn4yI7wd+CJ3jd8o1++aP+3Tcf/V/gD8I/NQDX/814K+9ne/pd3g+fw/444j9+L587X2IDAXwXwM/8cDPX37uYfsDfBA9DH8E+AeIcfwS0L7x2gE/BfzB/HvLn7O3+xze4rweAz7/je/vO+Ga/Xb/vN3twAeALz3w9fP52rfdkSXw7wV+FnhvRLyQ33oReG/+/dvpfP9L4D+FiynyU8ArEZcUiwff++W88vuv5s8/jMdHgK8B/322Ov+tmd3mO+Oa/baOt3sR+I44zOwR4O8AfyUiXnvwe6Ht49tqDmtmfxr4akT8wtv9Xn4Xjgb8CPC3IuL3Ane5X/oD357X7HdyvN2LwJeBDz3w9QfztW+bwyTh+zvA/xgR/3u+/BUze19+/33AV/P1b5fz/UPAnzWz3wD+Z9QS/A3gcbOLd/WD7/1yXvn9x3hL4erbfjwPPB8RP5tf/220KHy7X7Pf9vF2LwI/B3wsUecV+PPA33+b39Nv+TA5W/x3wKcj4r944Ft/H/gL+fe/gLCC4/X/MBHnPwC8+kAJ+tAcEfHXIuKDEfFhdE3+UUT8B8DPAH8uf+wbz+s43z+XP/9Q7qQR8SLwJTP7eL70R4FP8f+1a684CMRQFEAPCiwsgRUgkAg0W2JJGAQSNkAQBByfvSCmHiaIBnpP0mR+4r00uZnO9Mfn7Cu1P0pghRueWNeup2ftC91r4wXnMla69fABd+wxKc8PdH9DnrhiXruHD3pcYleOpzjigQ2G5fqonD/K/Wntut/0NMOpzNsW43+as74j24YjGld7ORARlSUEIhqXEIhoXEIgonEJgYjGJQQiGpcQiGjcCyuiY+X3tW6rAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "image_dict = {}\n",
    "im = data[0]['img'][0].squeeze(0).permute(1,2,0)\n",
    "mask = cv2.resize(mask, (im.shape[1], im.shape[0]))\n",
    "image_cam, image_dict['heatmap'] = gen_cam(im, mask)\n",
    "plt.imshow(image_cam)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
